我试图将我的dataSource设置为获取连接,但它在conn = dataSource.getConnection();上返回null。以下是我DAO的相关代码:
@Autowired
public void setDataSource(DataSource dataSource) {
this.dataSource = dataSource;
}
@Override
public Acronym findByAcronymId(int acronymId) {
String sql = "SELECT * FROM acronym_table WHERE acronymId = ?";
Connection conn = null;
try {
conn = dataSource.getConnection();
这是数据库bean:
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd">
<bean id = "dataSource"
class = "org.springframework.jdbc.datasource.DriverManagerDataSource">
<property name="driverClassName" value="com.mysql.jdbc.Driver" />
<property name="url" value="jdbc:mysql://localhost:3306/db_name?useSSL=false" />
<property name="username" value="username" />
<property name="password" value="password" />
</bean>
</beans>
这里是首字母缩略词bean:
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
<bean id = "acronymDAO" class ="com.user.dao.JdbcAcronymDAO">
<property name = "dataSource" ref ="dataSource"/>
</bean>
</beans>
答案 0 :(得分:3)
尝试在字段上移动@Autowired
注释,如下所示:
@Autowired
private DataSource dataSource;
或者把它放在构造函数级别上,而不是把它放在setter级别上。
我认为数据源bean没有自动连接,因为你在setter级别上使用它,它永远不会被调用。
答案 1 :(得分:0)
将此行添加到弹簧上下文xml
<context:annotation-config/>
这样它就可以扫描你的类以获取@Autowired注释
答案 2 :(得分:0)
问题是我有一个额外的豆子。一旦我删除了首字母缩略词bean并设置@Autowired它就能正常工作