我正在学习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
)的已更新应用程序属性。
默认情况下,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会寻找
spring.datasource.url (或 spring.datasource.jdbc-url)
Spring数据源用户名
Spring数据源密码
如果您指定自己的另一个
DataSource
,则不需要这些值。
因此,在上面指定的示例中,假设
db3.datasource
spring将查找
db3.datasource.url
db3.datasource.username
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? 沙布尔酒店