Spring Boot 整合 MyBatis 和 JdbcTemplate 操作多个数据库,获取不到jdbcTemplate,Spring容器中的Bean名称默认是方法名

JdbcTemplate jdbcTemplate = jdbcTemplateMap.get(database+"JdbcTemplate");
@Bean
public Map<String, JdbcTemplate> jdbcTemplateMap(
@Qualifier("aaaJdbcTemplate") JdbcTemplate aaaJdbcTemplate,
@Qualifier("bbbJdbcTemplate") JdbcTemplate bbbJdbcTemplate,
@Qualifier("cccJdbcTemplate") JdbcTemplate cccJdbcTemplate) {
Map<String, JdbcTemplate> jdbcTemplateMap = new HashMap<>();
jdbcTemplateMap.put("aaa", aaaJdbcTemplate);
jdbcTemplateMap.put("bbb", bbbJdbcTemplate);
jdbcTemplateMap.put("ccc", cccJdbcTemplate);
return jdbcTemplateMap;
}

@Bean(name = "aaaJdbcTemplate")
public JdbcTemplate aaaJdbcTemplate(@Qualifier("aaaDataSource") DataSource dataSource) {
testConnectionConnection(dataSource);
return new JdbcTemplate(dataSource);
}

key不是aaabbbccc 是要加上"JdbcTemplate"

1. 简要解释问题原因

因为Spring容器中的Bean名称默认是方法名,而@Qualifier注解并未明确指定key与Bean名称的映射关系。
明确Bean名称映射:通过@Bean注解的name属性或@Qualifier注解,确保key与实际注入的JdbcTemplate实例匹配。
检查注入逻辑:确保jdbcTemplateMap的key与配置文件中的数据源名称一致。


在定义JdbcTemplate Bean时,可以通过@Bean(name = "...")明确指定Bean名称,例如:

@Bean(name = "aaaJdbcTemplate")
 
JdbcTemplate jdbcTemplate = jdbcTemplateMap.get(database+"JdbcTemplate");
搞了一天,真塔
                   .-' _..`.
                  /  .'_.'.'
                 | .' (.)`.
                 ;'   ,_   `.
 .--.__________.'    ;  `.;-'
|  ./               /
|  |               /
`..'`-._  _____, ..'
     / | |     | |\ \
    / /| |     | | \ \
   / / | |     | |  \ \
  /_/  |_|     |_|   \_\
 |__\  |__\    |__\  |__\
戈壁
posted @ 2025-03-15 23:46  Rocken.li  阅读(51)  评论(0)    收藏  举报