我将一些SQL查询以Map的形式存储在应用程序上下文.xml文件中
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:util="http://www.springframework.org/schema/util" xsi:schemaLocation="
http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util.xsd">
<util:map id="queries" key-type="java.lang.String" value-type="java.lang.String">
<description>Map contain SQL queries to handle ETL Framework database operations</description>
<entry key="getJobById" value="SELECT * FROM etl_jobs WHERE job_id = ?"/>
<entry key="getJobsByName" value="SELECT * FROM etl_jobs WHERE job_name LIKE ?"/>
...
</util:map>
In my Java code I have the following:
@Repository
@ImportResource("classpath:applicationContext.xml")
public class EtlDataRepository {
private static final Logger LOG = LoggerFactory.getLogger(EtlDataRepository.class.getName());
@Autowired
private JdbcTemplate jdbc;
private Map<String, String> queries;
...
}
我也有这个类的setter和getter. 但是,当应用程序启动时,查询bean不会加载,即它为null. 几年前我写了非常相似的代码,它工作得很好. Spring-boot从v.2.3到v.3.2有什么变化使它无法工作,我该如何修复它?
将@ImportResource移到顶部,即@SpringBootApplication没有改变任何事情.将@AuTower添加到 map 查询导致以下错误:
*
描述:
Com.visa.vms.etl.daemon.dao.EtlDataRepository中的字段查询 找不到所需的‘java.util.Map’类型的Bean.
注入点具有以下注释:
- @org.springframework.beans.factory.annotation.Autowired(required=true)
该Bean在ApplationConext.xml文件中定义.看起来这个上下文没有被导入.
在使用SpringBootv.2.3的旧应用程序中使用了完全相同的代码(具有不同的 map 内容),并且无需自动装配即可工作.