我的自动装配的DataSource在Spring中返回null,为什么会这样?

时间:2017-06-28 16:07:00

标签: spring spring-mvc datasource autowired

我试图将我的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>

3 个答案:

答案 0 :(得分:3)

尝试在字段上移动@Autowired注释,如下所示:

@Autowired
private DataSource dataSource;

或者把它放在构造函数级别上,而不是把它放在setter级别上。

我认为数据源bean没有自动连接,因为你在setter级别上使用它,它永远不会被调用。

答案 1 :(得分:0)

将此行添加到弹簧上下文xml

<context:annotation-config/>

这样它就可以扫描你的类以获取@Autowired注释

答案 2 :(得分:0)

问题是我有一个额外的豆子。一旦我删除了首字母缩略词bean并设置@Autowired它就能正常工作