Я использую Spring jdbc для соединения с DB. И каждый раз, когда я запускаю тестовую весну класса java, контекст также загружается каждый раз. Любое предложение?
Мой фрагмент кода ниже,
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));
}
}
}
Ваш DAO не должен знать о контексте приложения и не должен явно искать в нем вещи. Вы можете переписать его, используя документацию Spring в качестве примера:
public class DbDaoImpl implements DbDao {
private JdbcTemplate jdbcTemplate;
public void setDataSource(DataSource dataSource) {
this.jdbcTemplate = new JdbcTemplate(dataSource);
}
...
}
и вы можете удалить запись jdbcTemp из контекста xml приложения. Вместо этого создайте DAO Spring, создав для него запись следующим образом:
<bean id="dbDao" class="DbDaoImpl">
<property name="dataSource" ref="dataSource"/>
</bean>
Это потому, что вы каждый раз создаете новый экземпляр:
new DbDao().getJdbctemplate();
и далее:
new ClassPathXmlApplicationContext("appContext.xml");
Это не проблема Весны. Это до вашего дизайна.
И я не знаю, как вам помочь, так как это просто правильный код Java: в любом случае в случае public static void main(String[] args)
вы должны создавать объекты, чтобы получить с ними дело.
Пожалуйста, предоставьте больше информации, где ваши сомнения
java com.pinovus.dbconnection.test
) каждый раз она не только создает контекст, но даже запускает JVM
getJdbctemplate()
который каждый раз загружает контекст весны. Что вы хотите от этого?