我正在使用现有的Spring Boot应用程序。 application.properties文件指定“spring.datasource
”数据库。通过Spring的魔力,这个数据源在整个代码中由以下NamedParameterJdbcTemplate使用:
@Autowired
NamedParameterJdbcTemplate namedJdbcTemplate;
我需要访问其他数据源。我将数据库属性添加到application.properties文件中。然后我修改了Configure.java文件,如下所示:
@Primary
@Bean(name = "dataSource")
@ConfigurationProperties(prefix = "spring.datasource")
public DataSource dataSource() {
return DataSourceBuilder.create().build();
}
@Bean(name = "namedJdbcTemplate")
public NamedParameterJdbcTemplate namedJdbcTemplate(@Qualifier("dataSource") DataSource dataSource) {
return new NamedParameterJdbcTemplate(dataSource);
}
@Bean(name = "dbiSupportDataSource")
@ConfigurationProperties(prefix = "spring.dbisupport")
public DataSource dbiSupportDataSource() {
return DataSourceBuilder.create().build();
}
我将自动接线保留到namedJdbcTemplate
并为我的新数据源添加了自动接线:
@Autowired
NamedParameterJdbcTemplate namedJdbcTemplate;
@Autowired
DataSource dbiSupportDataSource;
使用此代码,对新数据库源的SQL查询会导致如下错误:
错误的SQL语法[SELECT * FROM
support.core
。table]
如果我从Configure.java文件中注释掉原始数据源和namedJdbcTemplate
,则相同的SQL查询会成功运行。
我还要注意,即使我添加了新的数据源,namedJdbcTemplate
的SQL查询也能继续成功运行。
设置新数据源时我做错了什么?我是否需要将SQL查询更改为新数据源?
答案 0 :(得分:0)
在为配置文件中的所有数据源定义模板后,SQL查询开始对两个数据库起作用。换句话说,我在Configuration.java中添加了以下内容:
@Bean(name = "dbiSupportJdbc")
public NamedParameterJdbcTemplate dbiSupportJdbc(
@Qualifier("dbiSupportDataSource") DataSource dbiSupportDataSource) {
return new NamedParameterJdbcTemplate(dbiSupportDataSource);
}
然后我自动安装了两个模板,而不是混合模板和数据源:
@Autowired
NamedParameterJdbcTemplate namedJdbcTemplate;
@Autowired
NamedParameterJdbcTemplate dbiSupportJdbc;