Spring启动应用程序.属性命名



我正在学习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();
}
}

之后,在每个您想要DataSourceClass中,您可以指定您喜欢的bean:

public class DB3DependedClass{

private final DataSource dataSource;
public DB3DependedClass(@Qualifier("db3Datasource") DataSource dataSource){
this.dataSource = dataSource;

}
}

默认情况下,spring会查找

  1. spring.datasource.url (or spring.datasource.jdbc-url)
  2. spring.datasource.username
  3. spring.datasource.password

如果您自己指定了另一个DataSource,则不需要这些值。

在上面的例子中我们指定比如db3.datasourcespring会查找

  1. db3.datasource.url
  2. db3.datasource.username
  3. db3.datasource.password
  4. 这里重要的是spring不是完整路径确实是:db3.datasource.url不,spring.db3.datasource.url

    最后总结一下,如果你想的话,你可以灵活地让它从spring开始,通过声明一个像spring.any.path.ilike.datasouce这样的前缀,当然在它下面是相关的值。只要你指定,Spring就会选择任意一条路径。

    注意:此答案仅写在此处提供的文本框中,未在IDE中测试编译错误。逻辑仍然成立,尽管

最新更新