標籤:
<!-- 定義mongo對象,對應的是mongodb官方jar包中的Mongo,replica-set設定叢集副本的ip地址和連接埠 --> <mongo:mongo id="mongo" replica-set="${mongo.hostport}"> <mongo:options connections-per-host="${mongo.connectionsPerHost}" threads-allowed-to-block-for-connection-multiplier="${mongo.threadsAllowedToBlockForConnectionMultiplier}" connect-timeout="${mongo.connectTimeout}" max-wait-time="${mongo.maxWaitTime}" auto-connect-retry="${mongo.autoConnectRetry}" socket-keep-alive="${mongo.socketKeepAlive}" socket-timeout="${mongo.socketTimeout}" slave-ok="${mongo.slaveOk}" write-number="1" write-timeout="0" write-fsync="true" /> </mongo:mongo> <!-- mongo的工廠,通過它來取得mongo執行個體,dbname為mongodb的資料庫名,沒有的話會自動建立 mongo-ref="mongo" 與<mongo:mongo id="mongo" 相依賴 --> <mongo:db-factory dbname="Data" mongo-ref="mongo"/> <!-- mongodb的主要操作對象,所有對mongodb的增刪改查的操作都是通過它完成 --> <bean id="mongoTemplate" class="org.springframework.data.mongodb.core.MongoTemplate"> <constructor-arg name="mongoDbFactory" ref="mongoDbFactory" /> </bean> #Mongodb 一 Settingmongo.hostport=127.0.0.1:27017mongo.connectionsPerHost=8mongo.threadsAllowedToBlockForConnectionMultiplier=4#連線逾時時間mongo.connectTimeout=1000#等待時間mongo.maxWaitTime=1500mongo.autoConnectRetry=truemongo.socketKeepAlive=true#Socket逾時時間mongo.socketTimeout=1500mongo.slaveOk=true MySql(採用Proxool串連池技術)Proxool是一種Java資料庫連接池技術。proxool-0.9.1.jarproxool-cglib-0.9.1.jar 第一步:在web.xml中調用對應的applicationContext-proxool.xml例如:web.xml中的(*為萬用字元,可以查詢到applicationContext-proxool.xml) <context-param> <param-name>contextConfigLocation</param-name> <param-value>classpath*:applicationContext*.xml</param-value> </context-param> 第二步:在applicationContext-proxool.xml中寫串連池 <bean id="dataSourceTarget" class="org.logicalcobwebs.proxool.ProxoolDataSource"> <property name="driver" value="${jdbc.driverClassName}" /> <property name="driverUrl" value="${jdbc.url}"></property> <property name="user" value="${jdbc.username}" /> <property name="password" value="${jdbc.password}" /> <property name="alias" value="site_ds" /> <!-- 最少保持的空閑串連數 --> <property name="prototypeCount" value="${proxool.prototypeCount}" /> <!-- 允許最大串連數,超過了這個串連,再有請求時,就排在隊列中等候,最大的等待請求數由simultaneousBuildThrottle決定 --> <property name="maximumConnectionCount" value="${proxool.maximumConnectionCount}" /> <!-- 最小串連數 --> <property name="minimumConnectionCount" value="${proxool.minimumConnectionCount}" /> <!-- 一個線程持有一個串連的最長時間,而不管這個串連是否處於 active 狀態, 並且如果線程的持有時間超過這個時間的之後會自動清除掉這個串連. 但是很多時候5分鐘並不夠用, 所以需要在設定檔中進行設定, 其單位為毫秒(ms). --> <property name="maximumActiveTime" value="86400000" /> <!-- 指因未有空閑串連可以分配而在隊列中等候的最大請求數,超過這個請求數的使用者串連就不會被接受 --> <property name="simultaneousBuildThrottle" value="50" /> <property name="houseKeepingTestSql" value="select CURRENT_DATE" /></bean><!--
Spring官方推薦使用LazyConnectionDataSourceProxy
(http://static.springsource.org/spring/docs/2.5.6/api/org/springframework/jdbc/datasource/LazyConnectionDataSourceProxy.html)。
目的: 1).解決Hiberante命中cache時,會對資料庫發起SET autocommit=0,commit,SET autocommit=0操作問題;
2).解決read_only事務對效能的影響問題 -->
<!-- 個人覺得是用來管理資料來源的 -->
<bean id="dataSource"
class="org.springframework.jdbc.datasource.LazyConnectionDataSourceProxy">
<property name="targetDataSource">
<ref local="dataSourceTarget" />
</property>
</bean>
<bean id="transactionManager"
class="org.springframework.jdbc.datasource.DataSourceTransactionManager" lazy-init="true">
<property name="dataSource" ref="dataSource" />
</bean>
<bean id= "nameMatch" class= "org.springframework.transaction.interceptor.NameMatchTransactionAttributeSource" >
<property name= "properties" >
<props>
<prop key="*">PROPAGATION_REQUIRED</prop>
</props>
</property>
</bean> <!--利用了攔截器的原理。 --> <bean id="transactionInterceptor" class="org.springframework.transaction.interceptor.TransactionInterceptor"> <!-- 事務攔截器bean需要依賴注入一個交易管理員 --> <property name="transactionManager"> <ref bean="transactionManager" /> </property> <!--事務傳播屬性 --> <property name="transactionAttributeSource"> <ref bean="nameMatch" /> </property> </bean> <bean id="txProxy" class="org.springframework.aop.framework.autoproxy.BeanNameAutoProxyCreator"> <property name="beanNames"> <list> <value>*Manager</value> <value>*Service</value> </list> </property> <property name="interceptorNames"> <list> <value>transactionInterceptor</value> </list> </property> </bean> <!--1:配置一個JdbcTemplate執行個體,並將這個“共用的”,“安全的”執行個體注入到不同的DAO類中去 --> <bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate"> <property name="dataSource" ref="dataSource"/> </bean> 第三步:由於在applicationContext-proxool.xml寫參數麻煩,把參數寫在applicationContext-database.properties如下:#SQL DB Setttingjdbc.driverClassName=com.mysql.jdbc.Driverjdbc.url=jdbc\:mysql\://127.0.0.1\:3306/databasejdbc.username=rootjdbc.password=rootproxool.maximumConnectionCount=50proxool.minimumConnectionCount=1proxool.prototypeCount=1
mongoDB(spring 部分配置)