我正在学习springboot并尝试连接到DB2数据库。我把它修好了。
下面是我的工作DB2属性:spring.datasource.url=jdbc:db2://server:port/database:currentSchema=schema-name;
spring.datasource.username=user1
spring.datasource.password=password1
但是我将它们重命名为以"db2"而不是"spring"如:
db2.datasource.url=jdbc:db2://server:port/database:currentSchema=schema-name;
db2.datasource.username=user1
db2.datasource.password=password1
我的应用程序仍然运行,但是,当我这样做时,我的控制器不再像重命名之前那样返回结果。
我问这个问题的原因是,如果我将来添加第二个数据源,如果我这样命名它们,我可以很容易地通过它们的数据源区分属性。
更新:
感谢@Kosta Tenasis下面的回答和这篇文章(https://www.javadevjournal.com/spring-boot/multiple-data-sources-with-spring-boot/),我能够解决并弄清楚这个问题。
然后回到我的具体问题,一旦数据源配置就绪,就可以修改应用程序了。属性:
db2.datasource.url=...
代替:
spring.datasource.url=...
注一:如果你使用的是Springboot 2.0,他们改为使用Hikari, Hikari没有url
属性,而是使用jdbc-url
,所以只需将上面更改为:
db2.datasource.jdbc-url=...
注2:在您的数据源中,您必须在向项目添加多个数据源时创建,您将拥有注释@ConfigurationProperties
。该注释需要指向已更新的应用程序。数据源(db2.datasource.url
)的属性
默认情况下,Spring查找spring.datasource.**
以查找要连接的DataSource
的属性。
所以你可能会得到错误的结果,因为你没有连接到数据库。如果你想用不同于默认的属性来配置数据源,你可以这样做
@Configuration
public class DataSourceConfig {
@Bean
@ConfigurationProperties(prefix="db2.datasource")
public DataSource dataSource() {
return DataSourceBuilder.create()
.build();
}
假设有一天你想要第二个DataSource
你可以将之前的类修改为:
@Configuration
public class DataSourceConfig {
@Bean
@ConfigurationProperties(prefix="db2.datasource")
public DataSource d2Datasource() {
return DataSourceBuilder.create()
.build();
}
@Bean
@ConfigurationProperties(prefix="db3.datasource")
public DataSource db3Datasource() { //pun intented
return DataSourceBuilder.create()
.build();
}
}
之后,在每个您想要DataSource
的Class
中,您可以指定您喜欢的bean:
public class DB3DependedClass{
private final DataSource dataSource;
public DB3DependedClass(@Qualifier("db3Datasource") DataSource dataSource){
this.dataSource = dataSource;
}
}
默认情况下,spring会查找
spring.datasource.url (or spring.datasource.jdbc-url)
spring.datasource.username
spring.datasource.password
如果您自己指定了另一个DataSource
,则不需要这些值。
在上面的例子中我们指定比如db3.datasource
spring会查找
db3.datasource.url
db3.datasource.username
db3.datasource.password
这里重要的是
spring
不是完整路径确实是:db3.datasource.url
不,spring.db3.datasource.url
最后总结一下,如果你想的话,你可以灵活地让它从spring
开始,通过声明一个像spring.any.path.ilike.datasouce
这样的前缀,当然在它下面是相关的值。只要你指定,Spring就会选择任意一条路径。
注意:此答案仅写在此处提供的文本框中,未在IDE中测试编译错误。逻辑仍然成立,尽管