我使用spring jdbc进行数据库连接。每次运行我的测试java类spring时,每次都会加载context。有什么建议吗?
我的代码段在下面,
appContext.xml:
<?xml version="1.0" encoding="utf-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="
http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-2.0.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/beans/spring-context-2.0.xsd ">
<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource">
<property name="driverClassName" value="com.mysql.jdbc.Driver" />
<property name="url" value="jdbc:mysql://localhost:3306/3i" />
<property name="username" value="xxx" />
<property name="password" value="xxx" />
</bean>
<bean id="jdbcTemp" class="org.springframework.jdbc.core.JdbcTemplate">
<property name="dataSource" ref="dataSource">
</property>
</bean>
</beans>
Java类:
package com.pinovus.dbconnection;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import org.springframework.jdbc.core.JdbcTemplate;
public class DbDao {
private static JdbcTemplate jdbctemplate;
private static ApplicationContext appcontext;
public JdbcTemplate getJdbctemplate() {
ApplicationContext cx = new ClassPathXmlApplicationContext(
"appContext.xml");
jdbctemplate = (JdbcTemplate) cx.getBean("jdbcTemp");
return jdbctemplate;
}
public void setJdbctemplate(JdbcTemplate jdbctemplate) {
this.jdbctemplate = jdbctemplate;
}
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
}
}
测试java类是:
package com.pinovus.dbconnection;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.jdbc.support.rowset.SqlRowSet;
public class test {
public static void main(String[] args) {
// TODO Auto-generated method stub
JdbcTemplate jt = new DbDao().getJdbctemplate();
String qry = "select role from accounts";
SqlRowSet rs = jt.queryForRowSet(qry);
while (rs.next()) {
System.out.println(rs.getString(1));
}
}
}
答案 0 :(得分:1)
您的DAO不应该知道应用程序上下文,也不应该明确地查找其中的内容。您可以使用the Spring documentation作为示例重写它:
public class DbDaoImpl implements DbDao {
private JdbcTemplate jdbcTemplate;
public void setDataSource(DataSource dataSource) {
this.jdbcTemplate = new JdbcTemplate(dataSource);
}
...
}
您可以从应用程序上下文xml中删除jdbcTemp条目。而是让DAO Spring管理,为它创建一个条目:
<bean id="dbDao" class="DbDaoImpl">
<property name="dataSource" ref="dataSource"/>
</bean>
答案 1 :(得分:0)
那是因为你每次都创建新实例:
new DbDao().getJdbctemplate();
并进一步:
new ClassPathXmlApplicationContext("appContext.xml");
这不是Spring的问题。这取决于你的设计。
我不知道如何帮助你,因为它只是正确的Java代码:无论如何,public static void main(String[] args)
你必须实例化对象来处理它们。
请提供更多信息您的怀疑在哪里