java web 配置数据源_【Java Web开发学习】Spring配置数据源

Spring配置数据源

==============================================================

目录

===============================================================

1、使用JNDI数据源

Spring应用程序经常部署在Java EE应用服务器中,如WebSphere、JBoss或甚至像Tomcat这样的Web容器中。这些服务器允许你配置通过JNDI获取数据源。这种配置的好处在于数据源完全可以在应用程序之外进行管理,这样应用程序只需在访问数据库的时候查找数据源就可以了。

在服务器的server.xml的Context元素下配置Resource

/>

Java配置查找数据源

packagecn.ycx.config;importjavax.naming.NamingException;importjavax.sql.DataSource;importorg.springframework.context.annotation.Bean;importorg.springframework.context.annotation.Configuration;importorg.springframework.context.annotation.Profile;importorg.springframework.jndi.JndiObjectFactoryBean;

@Profile("PROD")

@Configurationpublic classJndiDataSourceConfig {

@Beanpublic DataSource dataSource() throwsIllegalArgumentException, NamingException {

System.out.println("JndiDataSourceConfig...");

JndiObjectFactoryBean jndi= newJndiObjectFactoryBean();

jndi.setJndiName("jdbc/mysql");

jndi.setResourceRef(true);//自动添加 java:comp/env/ 前缀

jndi.setProxyInterface(javax.sql.DataSource.class);

jndi.afterPropertiesSet();return(DataSource) jndi.getObject();

}

}

使用xml配置数据源时需要使用注解@ImportResource(value="classpath:context.xml")导入xml文件

@Profile("PROD")

@Configuration

@ImportResource(value="classpath:context.xml")

public class JndiDataSourceConfig

2、使用嵌入式数据源

packagecn.ycx.config;importjavax.sql.DataSource;importorg.springframework.context.annotation.Bean;importorg.springframework.context.annotation.Configuration;importorg.springframework.context.annotation.ImportResource;importorg.springframework.context.annotation.Profile;importorg.springframework.jdbc.datasource.embedded.EmbeddedDatabaseBuilder;importorg.springframework.jdbc.datasource.embedded.EmbeddedDatabaseType;

@Profile("DEV")

@Configurationpublic classEmbededDataSourceConfig {

@BeanpublicDataSource dataSource() {

System.out.println("EmbededDataSourceConfig...");return newEmbeddedDatabaseBuilder()

.setType(EmbeddedDatabaseType.H2)

.addScript("classpath:schema.sql")

.addScript("classpath:data.sql")

.build();

}

}

使用xml配置数据源时需要使用注解@ImportResource(value="classpath:context.xml")导入xml文件

@Profile("DEV")

@Configuration

@ImportResource(value="classpath:context.xml")public class EmbededDataSourceConfig

3、使用C3P0数据源

Java配置

packagecn.ycx.web.config;importjava.beans.PropertyVetoException;importjavax.sql.DataSource;importorg.springframework.beans.factory.annotation.Autowired;importorg.springframework.context.annotation.Bean;importorg.springframework.context.annotation.Configuration;importcom.mchange.v2.c3p0.ComboPooledDataSource;

@Configurationpublic classDataSourceConfig {

@Bean(name="dataSource")public DataSource dataSource() throwsPropertyVetoException {

ComboPooledDataSource comboPooledDataSource= newComboPooledDataSource();

comboPooledDataSource.setDriverClass("com.mysql.jdbc.Driver");

comboPooledDataSource.setJdbcUrl("jdbc:mysql:///ycxdb?useUnicode=true&autoReconnect=true&rewriteBatchedStatements=TRUE");

comboPooledDataSource.setUser("root");

comboPooledDataSource.setPassword("123456");

comboPooledDataSource.setInitialPoolSize(10);

comboPooledDataSource.setMinPoolSize(10);

comboPooledDataSource.setMaxPoolSize(50);

comboPooledDataSource.setMaxIdleTime(3600);//解决mysql timeout

comboPooledDataSource.setTestConnectionOnCheckout(false);

comboPooledDataSource.setTestConnectionOnCheckin(true);

comboPooledDataSource.setIdleConnectionTestPeriod(3600);returncomboPooledDataSource;

}

}

xml配置

使用数据源的Java业务代码

packagecn.ycx.service;importjava.sql.Connection;importjava.sql.PreparedStatement;importjava.sql.ResultSet;importjava.sql.Statement;importjava.time.LocalDateTime;importjava.time.format.DateTimeFormatter;importjava.util.ArrayList;importjava.util.HashMap;importjava.util.List;importjava.util.Map;importjava.util.Random;importjavax.sql.DataSource;importorg.springframework.beans.factory.annotation.Autowired;importorg.springframework.stereotype.Service;

@Servicepublic class IndexServiceImpl implementsIndexService {

@AutowiredprivateDataSource dataSource;

@Overridepublic List>get() {try{

List> list = new ArrayList>();

Map item = null;

Connection con=dataSource.getConnection();

Statement stm=con.createStatement();

ResultSet rs= stm.executeQuery("select id,username from user");while(rs.next()) {

item= new HashMap();

item.put("id", rs.getString("id"));

item.put("username", rs.getString("username"));

list.add(item);

}

rs.close();

stm.close();

con.close();returnlist;

}catch(Exception e) {

e.printStackTrace();

}return null;

}public Mapadd() {try{

Random r= newRandom();

LocalDateTime dt=LocalDateTime.now();

DateTimeFormatter formatter= DateTimeFormatter.ofPattern("yyyyMMddHHmmss");

Connection con=dataSource.getConnection();

PreparedStatement pstm= con.prepareStatement("insert into user(id,username)values(?,?)");

pstm.setString(1, dt.format(formatter));

pstm.setString(2, String.valueOf(r.nextInt()));int count =pstm.executeUpdate();

pstm.close();

con.close();

Map data = new HashMap();

data.put("status", String.valueOf(count));returndata;

}catch(Exception e) {

}return null;

}

}

注入数据源

@Autowired

private DataSource dataSource;

使用Connection con = dataSource.getConnection();取得链接

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值