前提・実現したいこと
Springboot環境・ロジックはJava使用ので、1つのDBを参照・更新していたものを複数(2つ)のDBを参照・更新するよう修正したい。
発生している問題・エラーメッセージ
実行時に以下のメッセージが表示され、最初の画面が表示されない。
org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'Contorller1': Unsatisfied dependency expressed through field 'loginService'; nested exception is org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'loginService': Unsatisfied dependency expressed through field 'npjdbcTemplate'; nested exception is org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type 'org.springframework.jdbc.core.namedparam.NamedParameterJdbcTemplate' available: expected at least 1 bean which qualifies as autowire candidate. Dependency annotations: {@org.springframework.beans.factory.annotation.Autowired(required=true), @org.springframework.beans.factory.annotation.Qualifier(value=JdbcTemplate1)}
該当のソースコード
Java
1(Properties) 2 3... 4spring.datasource.jdbc-url=jdbc:postgresql://***.***.***.***:5432/(db1) 5spring.datasource.url=jdbc:postgresql://***.***.***.***:5432/(db1) 6spring.datasource.username=postgres 7spring.datasource.password= 8spring.datasource.driverClassName=org.postgresql.Driver 9spring.seconddatasource.jdbc-url=jdbc:postgresql://***.***.***.***:5432/(db2) 10spring.seconddatasource.url=jdbc:postgresql://***.***.***.***:5432/(db2) 11spring.seconddatasource.username=postgres 12spring.seconddatasource.password= 13spring.seconddatasource.driverClassName=org.postgresql.Driver 14... 15
Java
1(Configクラス) 2@Configuration 3public class JdbcConfig { 4 @Bean(name="datasource1") 5 @Primary 6 @ConfigurationProperties(prefix="spring.datasource") 7 public DataSource DataSource1(){ 8 return DataSourceBuilder.create().build(); 9 } 10 11 @Bean(name="datasource2") 12 @ConfigurationProperties(prefix="spring.seconddatasource") 13 public DataSource DataSource2() { 14 return DataSourceBuilder.create().build(); 15 } 16 17 @Primary 18 @Bean(name="JdbcTemplate1") 19 @Autowired 20 JdbcTemplate createJdbcTemplate1(@Qualifier("datasource1") DataSource ds){ 21 return new JdbcTemplate(ds); 22 } 23 24 @Bean(name="JdbcTemplate2") 25 @Autowired 26 JdbcTemplate createJdbcTemplate2(@Qualifier("datasource2") DataSource ds){ 27 return new JdbcTemplate(ds); 28 } 29 30 @Primary 31 @Bean(name="NpJdbcTemplate1") 32 NamedParameterJdbcTemplate createNpJdbcTemplate1(@Qualifier("datasource1") DataSource ds){ 33 return new NamedParameterJdbcTemplate(ds); 34 } 35 36 @Bean(name="NpJdbcTemplate2") 37 NamedParameterJdbcTemplate createNpJdbcTemplate2(@Qualifier("datasource2") DataSource ds){ 38 return new NamedParameterJdbcTemplate(ds); 39 } 40 41}
Java
1(Controller) 2.... 3@Controller 4@EnableAutoConfiguration 5public class xxxContorller { 6 @Autowired 7 LoginService loginService; 8 9 @RequestMapping(value="/login", method=RequestMethod.GET) 10 public String login(Model model) { 11 Optional<Information>infoList = loginService.findInformation(); 12 .... 13 return "/xxx/login"; 14 } 15.... 16} 17 18(Service) 19.... 20@Service 21public class LoginService { 22 23 @Autowired 24 @Qualifier("tengaJdbcTemplate") 25 private NamedParameterJdbcTemplate npjdbcTemplate; 26 27 .... 28 29 public Optional<Information> findInformation(){ 30 31 Optional<Information> retInfo = Optional.of(new Information()); 32 33 String sql="select * from information where id=:id"; 34 SqlParameterSource parameters = new MapSqlParameterSource("id",CodetableKey.MESSAGE_ID_LOGIN); 35 List<Map<String, Object>> ret = npjdbcTemplate.queryForList(sql,parameters); 36 37 .... 38 } 39.... 40}
試したこと
- サービスLoginServiceのnpjdbcTemplateのアノテーションについて、@Autowiredのみの場合は正常に開始できて、DBからデータ取得が正常に行えている。
(テーブルinformation はプロパティファイルのDB1にのみ存在する)
- サービスLoginServiceのnpjdbcTemplateのアノテーションについて、@Qualifierのみの場合はエラーなく開始はできるがDB検索実施の行でnpjdbcTemplateがNullになっている。
補足情報(FW/ツールのバージョンなど)
Java 1.8
Postgresql 11.9
回答2件
あなたの回答
tips
プレビュー