[英]Spring-boot - How to load resources/datasources?
我一直在使用Spring Boot並通過.jar
文件部署應用程序。 我想加載多個數據源 。 當我使用本地tomcat時,我曾經將它們添加到context.xml
,但現在我正在使用嵌入式tomcat,並且想知道是否可以通過某些外部文件或某種方式將它們加載到服務器上(UAT) / PROD)。
我已經找到了一個如何通過Java Class進行操作的示例,但我想知道是否可以以其他方式執行此操作,因為我想將用戶/密碼保留在.jar
和本地文件上的配置之外在服務器上。 (對於未來的發展看起來更容易/更快)。 也許使用“ datasource.yml
”或類似的東西..
有誰知道如何實現這一目標?
謝謝!
我的context.xml
:
<?xml version='1.0' encoding='utf-8'?>
<Context>
<!-- ABC QA -->
<Resource
name="jdbc/abc"
type="javax.sql.DataSource"
maxActive="5"
maxIdle="2"
username="xxx"
maxWait="1000"
validationQuery="select 1"
driverClassName="com.microsoft.sqlserver.jdbc.SQLServerDriver"
password="xxx"
url="jdbc:sqlserver://server-qa.com:1234;databaseName=myDB"/>
<!-- DEF QA -->
<Resource
name="jdbc/def"
type="javax.sql.DataSource"
maxActive="5"
maxIdle="2"
username="xxx"
maxWait="1000"
validationQuery="select 1"
driverClassName="com.microsoft.sqlserver.jdbc.SQLServerDriver"
password="xxx"
url="jdbc:sqlserver://server2-qa.com:1234;databaseName=myDB"/>
</Context>
Ps。:如果有人想檢查我引用的java,鏈接是: https : //github.com/wilkinsona/spring-boot-sample-tomcat-jndi/blob/master/src/main/java/sample /tomcat/jndi/SampleTomcatJndiApplication.java
經過一些更改后,下面的代碼現在適用於任何人需要它! :)
application.yml
server:
port: 9998
logging.level.org.springframework.web: DEBUG
spring.ds_db1:
url: jdbc:sqlserver://mydb1.com:1433;databaseName=mydb1
username: xxx
password: xxx
driverClassName: com.microsoft.sqlserver.jdbc.SQLServerDriver
spring.ds_db2:
url: jdbc:sqlserver://mydb2.com:1433;databaseName=mydb2
username: xxx
password: xxx
driverClassName: com.microsoft.sqlserver.jdbc.SQLServerDriver
DatabaseConfig
@Configuration
@ConfigurationProperties(prefix = "spring.ds_db1")
public class DatabaseDb1Config {
@Bean(name="dsDb1")
public DataSource dataSource() {
DriverManagerDataSource dataSource = new DriverManagerDataSource();
dataSource.setDriverClassName(env.getRequiredProperty("spring.ds_db1.driverClassName"));
dataSource.setUrl(env.getRequiredProperty("spring.ds_db1.url"));
dataSource.setUsername(env.getRequiredProperty("spring.ds_db1.username"));
dataSource.setPassword(env.getRequiredProperty("spring.ds_db1.password"));
return dataSource;
}
@Bean(name="jdbcDb1")
public JdbcTemplate jdbcTemplate(DataSource dsChange) {
return new JdbcTemplate(dsChange);
}
}
Repository
@Service
public class ContractRepositoryImpl implements ContractRepository {
@Autowired
@Qualifier("jdbcDb1")
protected JdbcTemplate jdbc;
public Contract getContract(long id) {
return jdbc.queryForObject("SELECT ...", contractMapper, id);
}
private static final RowMapper<Contract> contractMapper = new RowMapper<Contract>() {
public Contract mapRow(ResultSet rs, int rowNum) throws SQLException {
Contract contract = new Contract(rs.getLong("contract"), rs.getString("name"));
return contract;
}
};
}
pom.xml
相關部分
...
<spring.version>4.2.0.RELEASE</spring.version>
...
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-core</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-jdbc</artifactId>
<version>${spring.version}</version>
</dependency>
<!-- SQL SERVER DRIVER FOR LEGACY CONNECTIONS -->
<dependency>
<groupId>com.microsoft.sqlserver</groupId>
<artifactId>sqljdbc4</artifactId>
<version>2.0</version>
</dependency>
您可以使用application.properties(或.yml)文件配置數據源。 請參閱可用屬性列表。
Spring Boot將讀取來自不同源的配置文件 ,一個是存儲JAR文件的目錄,或者您使用系統屬性或環境變量提供值。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.