当前位置: 首页 > 知识库问答 >
问题:

Spring启动应用程序。特性命名

邢勇
2023-03-14

我正在学习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/),我才得以解决并弄清楚这个问题。

然后回到我的具体问题,一旦您对数据源进行了配置,您就可以将application.properties修改为:

db2.datasource.url=...

而不是:

spring.datasource.url=...

注意1:如果您使用的是Springboot 2.0,它们会更改为使用Hikari,而Hikari没有url属性,而是使用jdbc-url,因此只需将上面的更改为:

db2.datasource.jdbc-url=...

注2:在向项目添加多个数据源时必须创建的数据源中,将有批注@ConfigurationProperties。此注释需要指向数据源(db2.数据源.url)的已更新应用程序属性。

共有1个答案

耿炎彬
2023-03-14

默认情况下,Spring查找Spring.datasource**获取要连接的DataSource的属性。

所以您可能会得到错误的结果,因为您没有连接到数据库。如果您想用不同于默认属性的属性来配置数据源,您可以这样做

@Configuration
public class DataSourceConfig {

@Bean
@ConfigurationProperties(prefix="db2.datasource")
public DataSource dataSource() {
    return DataSourceBuilder.create()
                            .build();
}

假设有一天来了,你想要第二个数据源,你可以将上一个类修改为:

@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类中,可以指定您喜欢的bean:

public class DB3DependedClass{
    
    private final DataSource dataSource;

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

所以默认情况下Spring会寻找

  1. spring.datasource.url (或 spring.datasource.jdbc-url)
  2. Spring数据源用户名
  3. Spring数据源密码

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

因此,在上面指定的示例中,假设db3.datasourcespring将查找

  1. db3.datasource.url
  2. db3.datasource.username
  3. db3.datasource.password

这里重要的一点是,< code>spring没有被推断出来,这意味着完整的路径实际上是:< code>db3.datasource.url而不是< code > spring . db3 . data source . URL

最后,如果你愿意,你可以灵活地让它以Spring开头,方法是声明一个前缀,比如spring.any.path.ilike.datasouce,当然还有相关的值。只要你指定,Spring就会选择任一路径。

注意:这个答案只写在这里提供的文本框中,没有在IDE中测试编译错误。但逻辑仍然成立

 类似资料:
  • 我有一个spring启动应用程序,我需要通过进入文件夹目录并通过命令行启动我的web应用程序来启动它。我有一门课叫应用。java及其内部代码如下所示。 我设置了类路径,然后试图运行命令"",但我得到了这个错误消息""

  • 我在intellij上启动spring boot应用程序时遇到问题,它失败了,并显示以下消息:与目标VM断开连接,地址:'127.0.0.1:49784',传输:'socket' 过程结束,退出代码为255。以前有人遇到过这种情况吗?

  • 我是spring的初学者,希望这样做示例项目…我有一个数据库,我想连接到它…我使用了像AutoWired和service这样的注释。但有个问题我解决不了 Controller包中的RegisterationController具有我要调用的服务: 第一个包中的DataManagement类: 第一包中的StudentAccountRepository: 第一包中得学生帐户..引用数据库中的表: M

  • 我正在使用KeyClope来保护我的Spring Boot rest应用程序。 该应用程序还具有React前端。 我的问题是-前端是否也应该使用KeyClope进行保护? 如果没有,您将在何时保护前端和后端?

  • 我不熟悉测微计和普罗米修斯,我只使用dropwizards的指标。这让我有点困扰,我实际上需要有3个不同的实例来运行以查看指标 带测微计的Spring靴应用程序本身 使用dropwizard,我可以立即公开聚合指标。 这就是为什么我很好奇是否有可能将Prometheus与我的Spring Boots应用程序一起启动以立即公开很好的聚合数据。到目前为止,我还没有找到任何有用的东西,所以我希望这里的某

  • 我正在运行一个spring启动应用程序,除了尝试关闭它之外,一切都很好。我在下面的代码中出错 该错误在最后一行生成,spring boot将在2秒等待完成之前关闭level2List,如下所示 是否有任何方法可以命令关闭过程,或确保在关闭之前我没有使用level2List? 沙布尔酒店