런타임에 데이터베이스 URL 가져오기
3540 단어 javaspringbootspring
spring.datasource.url=jdbc:oracle:thin:@(DESCRIPTION=\
(LOAD_BALANCE=OFF)(FAILOVER=ON)\
(ADDRESS=(PROTOCOL=TCP)(HOST=domainName1.com) (PORT=1521))\
(ADDRESS=(PROTOCOL=TCP)(HOST=domainName2.com)(PORT=1521))\
(CONNECT_DATA=(SERVICE_NAME=xyz)))
이 URL은 하나의 호스트가 다운되면 애플리케이션이 두 번째 데이터베이스에 연결되도록 구성됩니다. 데이터베이스에 대한 URL은 아래와 같이 애플리케이션 상태 확인에 인쇄됩니다.Hello
version : 4.0.0
build : 2022-03-3
datasource : oracle.jdbc.OracleDriver
db url : jdbc:oracle:thin:@(DESCRIPTION=(LOAD_BALANCE=OFF)(FAILOVER=ON)(ADDRESS=(PROTOCOL=TCP)(HOST=domainName1.com) (PORT=1521))(ADDRESS=(PROTOCOL=TCP)(HOST=domainName2.com)(PORT=1521))(CONNECT_DATA=(SERVICE_NAME=xyz)))
db status : ok
제 질문은 사용 중인 데이터베이스의 호스트 이름만 얻을 수 있는 방법입니다. 즉, 응용 프로그램에서 현재 사용 중인 호스트(domainName1 또는 domainName2)를 가져와서 상태 확인에 표시하는 방법은 무엇입니까? 예를 들면 아래와 같습니다.Hello
version : 4.0.0
build : 2022-03-3
datasource : oracle.jdbc.OracleDriver
db url : jdbc:oracle:thin:@domainName1.com: 1521/coldv1
db status : ok (LVZ count = 379)
이번 헬스체크에 사용한 자바 코드는 아래와 같습니다.
`@GetMapping(경로 = "/healthcheck",
생성 = MediaType.APPLICATION_JSON_VALUE
)
공개 문자열 getServiceStatus(){
String[] activeProfiles = environment.getActiveProfiles();
최종 BeanWrapper 접근자 = PropertyAccessorFactory.forBeanPropertyAccess(dataSource);
final String driverClassName = String.valueOf(accessor.getPropertyValue("driverClassName"));
문자열 URL = null;
if(activeProfiles[1].equals("external_tomcat")) {
url = String.valueOf(accessor.getPropertyValue("url"));
}else{
try {
String[] dataSourceProperties = nameService.getDataSource();
url = dataSourceProperties[0];
} catch (SQLException ex) {
//throwables.printStackTrace();
log.error(ex.getMessage(), ex);
}
}
String version = buildProperties.getVersion();
String buildTimestamp = String.valueOf(buildProperties.getTime());
BigDecimal count = nameService.getCount("Table_name_of_database");
StringBuilder result = new StringBuilder("Hello")
.append("\nversion :\t")
.append(version)
.append("\nbuild :\t")
.append(buildTimestamp)
.append("\ndatasource :\t")
.append(driverClassName)
.append("\ndb url :\t")
.append(url)
.append("\ndb status :\tok ")
.append(count.intValue())
.append(")");
return result.toString();
}`
NameService.java
`@재정의
public String[] getDataSource()가 SQLException을 던짐 {
return getDataSourceProperties();
}
public String[] getDataSourceProperties() {
String[] dataSourceProperties = new String[2];
HikariDataSource dataSource = getDataSourceFromHibernateEntityManager();
if(dataSource.getJdbcUrl() != null){
dataSourceProperties[0] = dataSource.getJdbcUrl();
dataSourceProperties[1] = dataSource.getDataSourceClassName();
}
return dataSourceProperties;
}`
Reference
이 문제에 관하여(런타임에 데이터베이스 URL 가져오기), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/eriftekhar/getting-the-database-url-at-run-time-3aji텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)