spring数据源的几种配置
来源:互联网 发布:clean my mac 怎么样 编辑:程序博客网 时间:2024/05/01 08:57
<pre name="code" class="html">一、使用jndi,数据库驱动跟数据源隔离spring-dataSource.xml配置如下<bean id="dataSource" class="org.springframework.jndi.JndiObjectFactoryBean"> <property name="jndiName"> <value>java:comp/env/test</value> </property> </bean><bean id="sessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean"> <property name="dataSource"> <ref bean="dataSource" /> </property> <property name="hibernateProperties"> <props> <prop key="hibernate.dialect"> org.hibernate.dialect.Oracle10gDialect </prop><!-- <prop key="hibernate.query.factory_class"> org.hibernate.hql.classic.ClassicQueryTranslatorFactory </prop>--> <prop key="hibernate.show_sql">false</prop> <prop key="hibernate.format_sql">false</prop> </props> </property> <property name="mappingResources"> <list> <value>csdc/bean/ProjectApplication.hbm.xml</value> <value>csdc/bean/ProjectApplicationReview.hbm.xml</value> <value>csdc/bean/ProjectApplicationReviewUpdate.hbm.xml</value> <value>csdc/bean/Expert.hbm.xml</value> </list> </property> </bean>tomcat content.xml配置:<Resource name="test" auth="Container" type="javax.sql.DataSource" driverClassName="oracle.jdbc.driver.OracleDriver" url="jdbc:oracle:thin:@192.168.88.220:1521:orcl" username="test" password="123456" maxActive="20" maxIdle="10" maxWait="-1"/>
web.xml配置如下:
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" version="2.5"> <context-param> <param-name>contextConfigLocation</param-name> <param-value>classpath:applicationContext.xml</param-value> </context-param> <filter> <filter-name>CharacterEncodingFilter</filter-name> <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class> <init-param> <param-name>encoding</param-name> <param-value>UTF-8</param-value> </init-param> <init-param> <param-name>forceEncoding</param-name> <param-value>true</param-value> </init-param> </filter> <filter> <filter-name>springSecurityFilterChain</filter-name> <filter-class>org.springframework.web.filter.DelegatingFilterProxy</filter-class> </filter> <filter> <filter-name>struts2</filter-name> <filter-class>csdc.tool.filter.MyStrutsFilter</filter-class> </filter> <filter> <filter-name>struts-execute</filter-name> <filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsExecuteFilter</filter-class> </filter> <filter-mapping> <filter-name>CharacterEncodingFilter</filter-name> <url-pattern>/*</url-pattern> </filter-mapping> <filter-mapping> <filter-name>springSecurityFilterChain</filter-name> <url-pattern>/*</url-pattern> </filter-mapping> <filter-mapping> <filter-name>struts2</filter-name> <url-pattern>/*</url-pattern> </filter-mapping> <filter-mapping> <filter-name>struts-execute</filter-name> <url-pattern>/*</url-pattern> </filter-mapping> <listener> <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> </listener> <listener> <listener-class>org.springframework.security.web.session.HttpSessionEventPublisher</listener-class> </listener> <listener> <listener-class>org.springframework.web.context.request.RequestContextListener</listener-class> </listener> <listener> <listener-class>csdc.tool.listener.StartUpListener</listener-class> </listener> <listener> <listener-class>csdc.tool.listener.SessionListener</listener-class> </listener> <servlet> <servlet-name>ConnectorServlet</servlet-name> <servlet-class>csdc.tool.fckeditor.ConnectorServlet</servlet-class> <init-param> <param-name>baseDir</param-name> <param-value>/upload/news/</param-value> </init-param> <load-on-startup>1</load-on-startup> </servlet> <servlet> <servlet-name>dwr-invoker</servlet-name> <servlet-class>uk.ltd.getahead.dwr.DWRServlet</servlet-class> <init-param> <param-name>debug</param-name> <param-value>true</param-value> </init-param> <init-param> <param-name>config</param-name> <param-value>/WEB-INF/config/dwr.xml</param-value> </init-param> <init-param> <param-name>logLevel</param-name> <param-value>warn</param-value> </init-param> <init-param> <param-name>crossDomainSessionSecurity</param-name> <param-value>false</param-value> </init-param> <load-on-startup>1</load-on-startup> </servlet> <servlet-mapping> <servlet-name>ConnectorServlet</servlet-name> <url-pattern>/tool/fckeditor/editor/filemanager/connectors/*</url-pattern> </servlet-mapping> <servlet-mapping> <servlet-name>dwr-invoker</servlet-name> <url-pattern>/dwr/*</url-pattern> </servlet-mapping> <session-config> <session-timeout>60</session-timeout> </session-config> <welcome-file-list> <welcome-file>/welcome.jsp</welcome-file> </welcome-file-list> <login-config> <auth-method>BASIC</auth-method> </login-config> <span style="color:#ff6666;"><resource-ref> <description>Oracle JNDI Datasource</description> <res-ref-name>smas</res-ref-name> <res-type>javax.sql.DataSource</res-type> <res-auth>Container</res-auth> </resource-ref></span></web-app>
二、数据源中配置驱动
<bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource"> <property name="driverClassName" value="com.mysql.jdbc.Driver" /> <property name="url" value="jdbc:mysql://192.168.88.220/hsasdb" /> <property name="username" value="test" /> <property name="password" value="123456" /> </bean><bean id="sessionFactory" class="org.springframework.orm.hibernate4.LocalSessionFactoryBean"> <property name="dataSource"> <ref bean="dataSource" /> </property> <property name="hibernateProperties"> <props> <prop key="hibernate.dialect">org.hibernate.dialect.MySQL5InnoDBDialect</prop> <prop key="hibernate.show_sql">false</prop> <prop key="hibernate.format_sql">false</prop><!-- <prop key="hibernate.cache.provider_class">net.sf.ehcache.hibernate.EhCacheProvider</prop> <prop key="hibernate.cache.region.factory_class">org.hibernate.cache.ehcache.EhCacheRegionFactory</prop> <prop key="hibernate.cache.use_query_cache">true</prop> <prop key="hibernate.jdbc.fetch_size">50</prop> --> <prop key="hibernate.current_session_context_class">org.springframework.orm.hibernate4.SpringSessionContext</prop> </props> </property> <property name="packagesToScan"> <list> <value>csdc.model</value> </list> </property> </bean><bean id="baseDao" class="csdc.dao.HibernateBaseDao"> <property name="sessionFactory"> <ref bean="sessionFactory" /> </property> </bean>
三、jdbcTemplate 配置,直接使用底层的jdbc
<!-- 自定义jdbcDao的依赖 --><bean id="jdbcDao" class ="csdc.dao.JdbcDao"><property name="jdbcTemplate"><ref bean="jdbcTemplate"/></property></bean><!--依赖jdbcTemplate的数据源 --><bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate"><property name="dataSource"><ref bean="smdbDataSource"/></property><property name=""></property></bean><bean id="smdbDataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource"> <!--org.apache.commons.dbcp.BasicDataSource--><property name="driverClassName" value="oracle.jdbc.OracleDriver" /><property name="url" value="jdbc:oracle:thin:@192.168.88.220:1521:orcl" /><property name="username" value="smdbtest" /><property name="password" value="p1013smdbtest702" /></bean>
相应的jbdcdao.java
public class JdbcDao { private JdbcTemplate jdbcTemplate; public List<String[]> query(String sql) { return jdbcTemplate.query(sql, new ResultSetExtractor<List<String[]>>() {public List<String[]> extractData(ResultSet rs) throws SQLException {int columnNumber = rs.getMetaData().getColumnCount();List res = new ArrayList();while(rs.next()) {String[] objs = new String[columnNumber];for (int i = 0; i < columnNumber; i++) {objs[i] = rs.getString(i + 1);}res.add(objs);}return res;}}); } //依赖注入public void setJdbcTemplate(JdbcTemplate jdbcTemplate) {this.jdbcTemplate = jdbcTemplate;} // JDBC-backed implementations of the methods on the CorporateEventDao follow...}具体的封装在org.springframework.jdbc.core.JdbcTemplate类中。其中JdbcTemplate继承JdbcAccessor
package org.springframework.jdbc.support;import javax.sql.DataSource;import org.apache.commons.logging.Log;import org.apache.commons.logging.LogFactory;import org.springframework.beans.factory.InitializingBean;public abstract class JdbcAccessor implements InitializingBean {protected final Log logger = LogFactory.getLog(getClass());private DataSource dataSource;//dataSource属性,配置bean,setter注入private SQLExceptionTranslator exceptionTranslator;private boolean lazyInit = true;public void setDataSource(DataSource dataSource) {this.dataSource = dataSource;}public DataSource getDataSource() {return this.dataSource;}public void setDatabaseProductName(String dbName) {this.exceptionTranslator = new SQLErrorCodeSQLExceptionTranslator(dbName);}public void setExceptionTranslator(SQLExceptionTranslator exceptionTranslator) {this.exceptionTranslator = exceptionTranslator;}public synchronized SQLExceptionTranslator getExceptionTranslator() {if (this.exceptionTranslator == null) {DataSource dataSource = getDataSource();if (dataSource != null) {this.exceptionTranslator = new SQLErrorCodeSQLExceptionTranslator(dataSource);}else {this.exceptionTranslator = new SQLStateSQLExceptionTranslator();}}return this.exceptionTranslator;}public void setLazyInit(boolean lazyInit) {this.lazyInit = lazyInit;}public boolean isLazyInit() {return this.lazyInit;}public void afterPropertiesSet() {if (getDataSource() == null) {throw new IllegalArgumentException("Property 'dataSource' is required");}if (!isLazyInit()) {getExceptionTranslator();}}}
package org.springframework.jdbc.core;public class JdbcTemplate extends JdbcAccessor implements JdbcOperations {private static final String RETURN_RESULT_SET_PREFIX = "#result-set-";private static final String RETURN_UPDATE_COUNT_PREFIX = "#update-count-";private NativeJdbcExtractor nativeJdbcExtractor;private boolean ignoreWarnings = true;private int fetchSize = 0;private int maxRows = 0;private int queryTimeout = 0;private boolean skipResultsProcessing = false;private boolean skipUndeclaredResults = false;private boolean resultsMapCaseInsensitive = false;public JdbcTemplate() {}public JdbcTemplate(DataSource dataSource) {setDataSource(dataSource);afterPropertiesSet();}public JdbcTemplate(DataSource dataSource, boolean lazyInit) {setDataSource(dataSource);setLazyInit(lazyInit);afterPropertiesSet();}//***********//public <T> T execute(ConnectionCallback<T> action) throws DataAccessException {Assert.notNull(action, "Callback object must not be null");Connection con = DataSourceUtils.getConnection(getDataSource());try {Connection conToUse = con;if (this.nativeJdbcExtractor != null) {// Extract native JDBC Connection, castable to OracleConnection or the like.conToUse = this.nativeJdbcExtractor.getNativeConnection(con);}else {// Create close-suppressing Connection proxy, also preparing returned Statements.conToUse = createConnectionProxy(con);}return action.doInConnection(conToUse);}catch (SQLException ex) {// Release Connection early, to avoid potential connection pool deadlock// in the case when the exception translator hasn't been initialized yet.DataSourceUtils.releaseConnection(con, getDataSource());con = null;throw getExceptionTranslator().translate("ConnectionCallback", getSql(action), ex);}finally {DataSourceUtils.releaseConnection(con, getDataSource());}}protected Connection createConnectionProxy(Connection con) {return (Connection) Proxy.newProxyInstance(ConnectionProxy.class.getClassLoader(),new Class[] {ConnectionProxy.class},new CloseSuppressingInvocationHandler(con));}public <T> T execute(StatementCallback<T> action) throws DataAccessException {Assert.notNull(action, "Callback object must not be null");Connection con = DataSourceUtils.getConnection(getDataSource());Statement stmt = null;try {Connection conToUse = con;if (this.nativeJdbcExtractor != null &&this.nativeJdbcExtractor.isNativeConnectionNecessaryForNativeStatements()) {conToUse = this.nativeJdbcExtractor.getNativeConnection(con);}stmt = conToUse.createStatement();applyStatementSettings(stmt);Statement stmtToUse = stmt;if (this.nativeJdbcExtractor != null) {stmtToUse = this.nativeJdbcExtractor.getNativeStatement(stmt);}T result = action.doInStatement(stmtToUse);handleWarnings(stmt);return result;}catch (SQLException ex) {// Release Connection early, to avoid potential connection pool deadlock// in the case when the exception translator hasn't been initialized yet.JdbcUtils.closeStatement(stmt);stmt = null;DataSourceUtils.releaseConnection(con, getDataSource());con = null;throw getExceptionTranslator().translate("StatementCallback", getSql(action), ex);}finally {JdbcUtils.closeStatement(stmt);DataSourceUtils.releaseConnection(con, getDataSource());}}public <T> T query(final String sql, final ResultSetExtractor<T> rse) throws DataAccessException {Assert.notNull(sql, "SQL must not be null");Assert.notNull(rse, "ResultSetExtractor must not be null");if (logger.isDebugEnabled()) {logger.debug("Executing SQL query [" + sql + "]");}class QueryStatementCallback implements StatementCallback<T>, SqlProvider {public T doInStatement(Statement stmt) throws SQLException {ResultSet rs = null;try {rs = stmt.executeQuery(sql);ResultSet rsToUse = rs;if (nativeJdbcExtractor != null) {rsToUse = nativeJdbcExtractor.getNativeResultSet(rs);}return rse.extractData(rsToUse);}finally {JdbcUtils.closeResultSet(rs);}}public String getSql() {return sql;}}return execute(new QueryStatementCallback());}<pre name="code" class="html"><span style="white-space:pre"></span>private static class RowCallbackHandlerResultSetExtractor implements ResultSetExtractor<Object> {private final RowCallbackHandler rch;public RowCallbackHandlerResultSetExtractor(RowCallbackHandler rch) {this.rch = rch;}public Object extractData(ResultSet rs) throws SQLException {while (rs.next()) {this.rch.processRow(rs);}return null;}}
}
0 0
- spring配置数据源的几种方式
- spring数据源的几种配置
- spring配置数据源的几种方法
- Spring配置数据源的几种形式
- spring中配置数据源的几种方法
- Spring中配置DataSource数据源的几种选择
- spring配置数据源几种方式
- spring配置数据源几种方式
- Spring连接数据源的几种方式
- java数据源的几种配置
- java数据源的几种配置
- java数据源的几种配置
- java数据源的几种配置
- Java配置数据源的几种方式
- Java配置数据源的几种方式
- Spring的数据源配置
- Spring中数据源和数据库连接池配置的几种方法
- Spring中数据源和数据库连接池配置的几种方法
- 分部署云存储系统Ceph架构剖析
- weka连接mysql数据库
- C# Socket多线程编程(一)
- 用ViewPager布局,但是又不想预加载的问题
- Google 新推出Background sync API
- spring数据源的几种配置
- 某理财APP多开器的思路(二)
- 关于云计算的基础知识整理
- tableview的复用机制
- PLSQL编程中的3种循环结构
- Android生成厂商包
- 解决360浏览器优先选择极速模式,在兼容模式下出现乱码问题
- 手机APP自动化测试简单录制
- Android 自定义加载框dialog