多个数据源和自动装配的JDBC模板在Spring Boot中导致错误的SQL语法

时间:2017-02-17 16:40:19

标签: spring-boot jdbctemplate

我正在使用现有的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查询更改为新数据源?

1 个答案:

答案 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;