DateSource
首先我们要获得者个数据源,spring提供了三个数据源方式
1.JNDI
如果应用配置在高性能的应用服务器(如WebLogic或Websphere等)上,我们可能更希望使用应用服务器本身提供的数据源。应用服务器的数据源 使用JNDI开放调用者使用,Spring为此专门提供引用JNDI资源的JndiObjectFactoryBean类。下面是一个简单的配置:
xml 代码
<bean id="dataSource" class="org.springframework.jndi.JndiObjectFactoryBean">
<property name="jndiName" value="java:comp/env/jdbc/bbt"/>
</bean>
也可以通过jndiName指定引用的JNDI数据源名称 Spring 2.0为获取J2EE资源提供了一个jee命名空间,通过jee命名空间,可以有效地简化J2EE资源的引用。下面是使用jee命名空间引用JNDI数据源的配置:
xml 代码
<jee:jndi-lookup id="dataSource" jndi-name=" java:comp/env/jdbc/bbt"/>
2.连接池
开源的连接池有多种,DBCP c3p0等等。
C3P0是一个开放源代码的JDBC数据源实现项目,它在lib目录中与Hibernate一起发布,实现了JDBC3和JDBC2扩展规范说明的 Connection 和Statement 池。下面是使用C3P0配置一个 Oracle数据源:
xml 代码
<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource"
destroy-method="close">
<property name="driverClass" value=" oracle.jdbc.driver.OracleDriver "/>
<property name="jdbcUrl" value=" jdbc:oracle:thin:@localhost:1521:ora9i "/>
<property name="user" value="admin"/>
<property name="password" value="1234"/>
</bean>
java代码
@bean
public BAsicDateSource dataSource(){
BasicDataSource ds =new BasicDataSource();
ds.setDriverClassName("org.h2.Driver");//数据源
ds.setUrl(...省略);
ds.setUsername(略);
ds.setPassword(略);
ds.setMaxActive(5);最大连接数,0是无限多个
ds.setInitialSize(5);连接池启动时创建的链接数量
}
3.基于JDBC
一般用于小型开发,不适用多线程。所以多用于测试。
使用profile选择数据源
在不同开发环境下需要选择不同是数据源
所以可以用Profile来配置选择
在java配置前加@profile()
@Profile("qq")
那么在qq被激活时,就会启动被注释的数据源
使用JDBC模板
1、JdbcTemplate (建议使用)
- package jdbc;
- import java.sql.Connection;
- import java.sql.PreparedStatement;
- import java.sql.SQLException;
- import javax.sql.DataSource;
- import org.springframework.context.ApplicationContext;
- import org.springframework.context.support.ClassPathXmlApplicationContext;
- import org.springframework.jdbc.core.JdbcTemplate;
- public class Test {
- private DataSource dataSource;
- public void setDataSource(DataSource dataSource) {
- this.dataSource = dataSource;
- }
- public void insert(User u) {
- String sql = "insert into _user " + "values(null, ?, ?)";//普通的sql语句
- JdbcTemplate template = new JdbcTemplate(dataSource);
- template.update(sql, new Object[]{u.getName(), u.getPassword()});
- }
- public static void main(String[] args) {
- ApplicationContext ctx = new ClassPathXmlApplicationContext(
- "applicationContext.xml");
- Test t = (Test) ctx.getBean("test");
- User u = new User();
- u.setName("dd");
- u.setPassword("dd");
- t.insert(u);
- }
- }
2、JdbcDaoSupport
这个更简单,不用new JdbcTemplate了。
- package jdbc;
- import org.springframework.context.ApplicationContext;
- import org.springframework.context.support.ClassPathXmlApplicationContext;
- import org.springframework.jdbc.core.support.JdbcDaoSupport;
- public class Test extends JdbcDaoSupport {
- //JdbcDaoSupport类已经有了public final void setDataSource(DataSource dataSource)了
- //不用重写也不能重写
- public void insert(User u) {
- String sql = "insert into _user " + "values(null, ?, ?)";//普通的sql语句
- this.getJdbcTemplate().update(sql, new Object[]{u.getName(), u.getPassword()});
- }
- public static void main(String[] args) {
- ApplicationContext ctx = new ClassPathXmlApplicationContext(
- "applicationContext.xml");
- Test t = (Test) ctx.getBean("test");
- User u = new User();
- u.setName("dd");
- u.setPassword("dd");
- t.insert(u);
- }
- }