2017-02-17 5 views
0

Ich arbeite mit einer vorhandenen Spring Boot-Anwendung. Die Datei application.properties gibt eine "spring.datasource" -Datenbank an. Durch die Magie des Frühlings wurde diese Datenquelle durch die folgende NamedParameterJdbcTemplate im Code verwendet:Mehrere Datenquellen und AutoWired JDBC-Vorlage verursacht schlechte SQL-Grammatik im Frühjahr Boot

@Autowired 
NamedParameterJdbcTemplate namedJdbcTemplate; 

ich zusätzliche Datenquellen zugreifen müssen. Ich habe die Datenbankeigenschaften zur Datei application.properties hinzugefügt. Dann modifizierte ich die Configure.java Datei wie folgt aussehen:

@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(); 
} 

ich die automatische Verdrahtung zum namedJdbcTemplate gehalten und hinzugefügt Auto Verdrahtung auf meine neue Datenquelle:

@Autowired 
NamedParameterJdbcTemplate namedJdbcTemplate; 

@Autowired 
DataSource dbiSupportDataSource; 

Mit diesem Code ein SQL-Abfrage an die neuen Datenbankquelle führt zu Fehlern wie folgt aus:

schlechte SQL-Grammatik [SELECT * FROM support.core .table]

Wenn ich die ursprüngliche Datenquelle und namedJdbcTemplate aus der Datei Configure.java auskommentieren, funktioniert die gleiche SQL-Abfrage erfolgreich.

Ich werde auch feststellen, dass eine SQL-Abfrage zu namedJdbcTemplate weiterhin erfolgreich funktioniert, auch wenn ich eine neue Datenquelle hinzufügen.

Habe ich beim Einrichten meiner neuen Datenquelle etwas falsch gemacht? Muss ich meine SQL-Abfrage in die neue Datenquelle ändern?

Antwort

0

SQL-Abfragen funktionierten für beide Datenbanken, nachdem ich Vorlagen für alle Datenquellen in der Konfigurationsdatei definiert hatte. Mit anderen Worten, habe ich folgendes Configuration.java:

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

Dann autowired ich beiden Vorlagen eher als Mischvorlagen und Datenquellen:

@Autowired 
NamedParameterJdbcTemplate namedJdbcTemplate; 

@Autowired 
NamedParameterJdbcTemplate dbiSupportJdbc; 
Verwandte Themen