2017-02-17 19 views
0

我與現有的春季啓動應用程序的工作。在application.properties文件指定一個「spring.datasource」數據庫。通過彈簧的魔法,使用此數據源通過以下是NamedParameterJdbcTemplate整個代碼:多數據源和自動裝配Autowired JDBC模板引起不良的SQL語法在春季啓動

@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。表]

如果我從Configure.java文件註釋掉原始數據源和namedJdbcTemplate,則同一個SQL查詢可以成功運行。

我還會注意到,即使添加新的數據源,對namedJdbcTemplate的SQL查詢仍會繼續成功運行。

設置新數據源時我做錯了嗎?我需要我的SQL查詢更改爲新的數據源?

回答

0

一旦我爲配置文件中的所有數據源定義了模板,SQL查詢就開始工作到兩個數據庫。換句話說,添加以下到Configuration.java:

@Bean(name = "dbiSupportJdbc") 
public NamedParameterJdbcTemplate dbiSupportJdbc(
     @Qualifier("dbiSupportDataSource") DataSource dbiSupportDataSource) { 
    return new NamedParameterJdbcTemplate(dbiSupportDataSource); 
} 

然後我自動裝配兩個模板,而不是混合的模板和數據源:

@Autowired 
NamedParameterJdbcTemplate namedJdbcTemplate; 

@Autowired 
NamedParameterJdbcTemplate dbiSupportJdbc; 
相關問題