gpt4 book ai didi

java - Spring-boot - 如何加载资源/数据源?

转载 作者:搜寻专家 更新时间:2023-11-01 03:35:23 24 4
gpt4 key购买 nike

我一直在使用 Spring Boot 并通过 .jar 文件部署应用程序。我想加载多个数据源。当我使用本地 tomcat 时,我曾经将它们添加到 context.xml,但现在我使用的是嵌入式 tomcat,并且想知道是否可以通过某些外部文件或某种方式加载它们将放在服务器上 (UAT/PROD)。

我找到了一个如何通过 Java 类实现它的示例,但我想知道是否可以通过其他方式实现它,因为我想将用户名/密码留在 .jar 和服务器上本地文件的配置。 (对于 future 的发展看起来更容易/更快)。也许使用“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

数据库配置

@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);
}

}

存储库

@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)文件配置数据源。查看列表available properties .

Spring Boot 将读取 configuration files from different sources ,一个是存储 JAR 文件的目录,或者您使用系统属性或环境变量提供值。

关于java - Spring-boot - 如何加载资源/数据源?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33611449/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com