統一JDK爲1.7
java
tomcat端口上下游各爲8080和8088,其餘服務端口默認
mysql
開發工具eclipse
git
版本控制git(爲方便公網查看,初期會託管到github)
github
其餘各項服務暫時不用啓動,先建立項目。
redis
建立maven項目相信看到這的oscer都會,這裏就不贅述,主要貼出一些配置文件(限於篇幅隨意貼了點,所有的請看github上)。spring
github地址:https://github.com/shang7053/base/tree/master/sustainable-parent sql
同時導入一份到osc-git,地址:http://git.oschina.net/loveliyiyi/basemongodb
這篇博客改了好屢次,最終仍是決定不貼上配置信息,由於一方面佔用篇幅太大,還有一方面他在博客裏並無太多意義,只有用到的時候再貼就行了。
數據庫
基本環境如上所述,如今用文字說明一下各項目之間的關係。
apache
首先是parent項目,這個項目集成了一些基本的依賴,好比spring相關、MQ、junit等等,是公共的依賴。
而後是sustainable-interactive,這個項目集成了redis以及springmvc等依賴。
最後是sustainable-service,這個就多了,有mybatis的、有mongo的等等。
至於common的包基本上也就放點工具包,服務接口之類的,可能會用到好比gson的第三方工具,倒沒什麼可說的。
還有一個就是各類配置文件,大部分集成到spring,小部分是基於之前本身寫的工具包,好比redis,由於爲了方便切換緩存,搞了一個公共的緩存接口,而後本身用oscache或者ehcache或者redis實現,因此這裏就直接拿來用了。
最後就是頁面了,登錄註冊也沒啥,最原生態的標籤,因此頁面看着……基本能用吧,就不獻醜了。
貼一下spring的配置文件吧,看這個估計就差很少了。
sustainable-interactive
context:annotation-config /> <context:component-scan base-package="sustainable.interactive" /> <tx:annotation-driven/> <import resource="dubbo-customer.xml"/> <context:property-placeholder location="classpath:redis.properties" /> <import resource="mq.xml"/>
dubbo-customer.xml
<!-- 消費方應用名,用於計算依賴關係,不是匹配條件,不要與提供方同樣 --> <dubbo:application name="dubbo_consumer" /> <!-- 使用zookeeper註冊中心暴露服務地址 --> <dubbo:registry address="zookeeper://zookeeper.sustainable.com:2181" /> <!-- 生成遠程服務代理,能夠像使用本地bean同樣使用demoService xml配置時使用 <dubbo:reference id="userDao" interface="scc.common.user.IUserDao" /> --> <!-- 掃描註解包路徑,多個包用逗號分隔,不填pacakge表示掃描當前ApplicationContext中全部的類 --> <dubbo:annotation package="sustainable.interactive" />
mq.xml
<!-- 基本配置開始 --> <!-- 鏈接工廠 --> <bean id="connectinFactory" class="org.apache.activemq.ActiveMQConnectionFactory"> <!-- 配置鏈接 --> <property name="brokerURL" value="tcp://activeMq.sustainable.com:61616" /> </bean> <!-- spring管理鏈接的工廠 --> <bean id="cachingConnectionFactory" class="org.springframework.jms.connection.CachingConnectionFactory"> <!-- 目標ConnectionFactory對應真實的能夠產生JMS Connection的ConnectionFactory --> <property name="targetConnectionFactory" ref="connectinFactory"></property> <!-- Session緩存數量 --> <property name="sessionCacheSize" value="10"></property> </bean> <!-- Spring JMS Template 配置JMS模版 --> <bean id="jmsTemplate" class="org.springframework.jms.core.JmsTemplate"> <property name="connectionFactory" ref="cachingConnectionFactory" /> </bean> <!-- 註冊消息轉換器 --> <bean id="messageConverter" class="sustainable.common.util.jms.SustainableMessageConverter"/> <!-- 基本配置結束 --> <!-- 註冊隊列開始 --> <!-- 註冊Queue隊列:僅有一個訂閱者會收到消息,消息一旦被處理就不會存在隊列中 --> <bean id="registQueue" class="org.apache.activemq.command.ActiveMQQueue"> <!-- 隊列名稱 --> <constructor-arg value="regist.notify"></constructor-arg> </bean> <!-- 使用Spring JmsTemplate 的消息生產者 --> <bean id="registQueueMessageProducer" class="sustainable.common.util.jms.QueueMessageProducer"> <property name="jmsTemplate" ref="jmsTemplate"></property> <property name="queue" ref="registQueue"></property> <property name="messageConverter" ref="messageConverter"></property> </bean> <!-- 註冊隊列結束 -->
sustainable-service
<context:annotation-config /> <context:component-scan base-package="sustainable.service" /> <!-- 數據源 --> <bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource" destroy-method="close"> <property name="driverClass" value="com.mysql.jdbc.Driver" /> <property name="jdbcUrl" value="jdbc:mysql://mysql.sustainable.com:3306/test" /> <property name="user" value="root" /> <property name="password" value="1234" /> <!--鏈接池中保留的最小鏈接數。 --> <property name="minPoolSize" value="1" /> <!--鏈接池中保留的最大鏈接數。Default: 15 --> <property name="maxPoolSize" value="5" /> <!--初始化時獲取的鏈接數,取值應在minPoolSize與maxPoolSize之間。Default: 3 --> <property name="initialPoolSize" value="3" /> <!--最大空閒時間,60秒內未使用則鏈接被丟棄。若爲0則永不丟棄。Default: 0 --> <property name="maxIdleTime" value="60" /> <!--當鏈接池中的鏈接耗盡的時候c3p0一次同時獲取的鏈接數。Default: 3 --> <property name="acquireIncrement" value="5" /> <!--JDBC的標準參數,用以控制數據源內加載的PreparedStatements數量。但因爲預緩存的statements 屬於單個connection而不是整個鏈接池。因此設置這個參數須要考慮到多方面的因素。 若是maxStatements與maxStatementsPerConnection均爲0,則緩存被關閉。Default: 0 --> <property name="maxStatements" value="0" /> <!--每60秒檢查全部鏈接池中的空閒鏈接。Default: 0 --> <property name="idleConnectionTestPeriod" value="60" /> <!--定義在從數據庫獲取新鏈接失敗後重復嘗試的次數。Default: 30 --> <property name="acquireRetryAttempts" value="30" /> <!--獲取鏈接失敗將會引發全部等待鏈接池來獲取鏈接的線程拋出異常。可是數據源仍有效 保留,並在下次調用getConnection()的時候繼續嘗試獲取鏈接。若是設爲true,那麼在嘗試 獲取鏈接失敗後該數據源將申明已斷開並永久關閉。Default: false --> <property name="breakAfterAcquireFailure" value="true" /> <!--因性能消耗大請只在須要的時候使用它。若是設爲true那麼在每一個connection提交的 時候都將校驗其有效性。建議使用idleConnectionTestPeriod或automaticTestTable 等方法來提高鏈接測試的性能。Default: false --> <property name="testConnectionOnCheckout" value="false" /> </bean> <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean"> <property name="dataSource" ref="dataSource" /> </bean> <!-- mapper.xml文件對應的接口 --> <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer"> <property name="basePackage" value="sustainable.service.dao" /> <property name="sqlSessionFactoryBeanName" value="sqlSessionFactory" /> </bean> <!-- 註解事物 --> <tx:annotation-driven /> <aop:aspectj-autoproxy /> <import resource="dubbo_provider.xml" /> <import resource="mq.xml" /> <import resource="mongo-config.xml"/>
dubbo_provider.xml
<!-- 提供方應用信息,用於計算依賴關係 --> <dubbo:application name="dubbo_provider" /> <!-- 使用zookeeper註冊中心暴露服務地址 --> <dubbo:registry address="zookeeper://zookeeper.sustainable.com:2181" /> <!-- 用dubbo協議在20880端口暴露服務 --> <dubbo:protocol name="dubbo" port="20880" /> <!-- 聲明須要暴露的服務接口 xml式配置 <dubbo:service interface="scc.common.user.IUserDao" ref="userDaoImpl" />--> <!-- 掃描註解包路徑,多個包用逗號分隔,不填pacakge表示掃描當前ApplicationContext中全部的類 --> <dubbo:annotation package="sustainable.service.service" />
mq.xml
<!-- 基本配置開始 --> <!-- ActiveMQ 鏈接工廠 --> <bean id="connectinFactory" class="org.apache.activemq.ActiveMQConnectionFactory"> <property name="brokerURL" value="tcp://activeMq.sustainable.com:61616" /> </bean> <!-- Spring用於管理真正的ConnectionFactory的ConnectionFactory --> <bean id="cachingConnectionFactory" class="org.springframework.jms.connection.CachingConnectionFactory"> <!-- 目標ConnectionFactory對應真實的能夠產生JMS Connection的ConnectionFactory --> <property name="targetConnectionFactory" ref="connectinFactory"></property> <!-- Session緩存數量 --> <property name="sessionCacheSize" value="10"></property> </bean> <!-- Spring JMS Template 配置JMS模版 --> <bean id="jmsTemplate" class="org.springframework.jms.core.JmsTemplate"> <property name="connectionFactory" ref="cachingConnectionFactory" /> </bean> <!-- 註冊消息轉換器 --> <bean id="messageConverter" class="sustainable.common.util.jms.SustainableMessageConverter"/> <!-- 基本配置結束 --> <!-- 註冊隊列開始 --> <!-- 註冊Queue隊列:僅有一個訂閱者會收到消息,消息一旦被處理就不會存在隊列中 --> <bean id="registQueue" class="org.apache.activemq.command.ActiveMQQueue"> <!-- 隊列名稱 --> <constructor-arg value="regist.notify"></constructor-arg> </bean> <!-- 消息處理 --> <bean id="registDealJmsMessage" class="sustainable.service.jms.RegistDeal"/> <!-- 異步接收消息處理類 --> <bean id="registQueueMessageListener" class="sustainable.common.util.jms.QueueMessageListener"> <property name="dealJmsMessage" ref="registDealJmsMessage"></property> </bean> <!-- 消息監聽容器 --> <bean id="registQueueContainer" class="org.springframework.jms.listener.DefaultMessageListenerContainer"> <property name="connectionFactory" ref="connectinFactory"></property> <property name="destination" ref="registQueue"></property> <property name="messageListener" ref="registQueueMessageListener"></property> </bean> <!-- 註冊隊列結束 --> <!-- 同步user隊列開始 --> <!-- 註冊Queue隊列:僅有一個訂閱者會收到消息,消息一旦被處理就不會存在隊列中 --> <bean id="syncUserQueue" class="org.apache.activemq.command.ActiveMQQueue"> <!-- 隊列名稱 --> <constructor-arg value="syncUser.notify"></constructor-arg> </bean> <!-- 使用Spring JmsTemplate 的消息生產者 --> <bean id="syncUserQueueMessageProducer" class="sustainable.common.util.jms.QueueMessageProducer"> <property name="jmsTemplate" ref="jmsTemplate"></property> <property name="queue" ref="syncUserQueue"></property> <property name="messageConverter" ref="messageConverter"></property> </bean> <!-- 同步user隊列結束 --> <!-- 同步user隊列開始 --> <!-- 消息處理 --> <bean id="syncUserDealJmsMessage" class="sustainable.service.jms.SyncUserDealJmsMessage"/> <!-- 異步接收消息處理類 --> <bean id="syncUserQueueMessageListener" class="sustainable.common.util.jms.QueueMessageListener"> <property name="dealJmsMessage" ref="syncUserDealJmsMessage"></property> </bean> <!-- 消息監聽容器 --> <bean id="syncUserQueueContainer" class="org.springframework.jms.listener.DefaultMessageListenerContainer"> <property name="connectionFactory" ref="connectinFactory"></property> <property name="destination" ref="syncUserQueue"></property> <property name="messageListener" ref="syncUserQueueMessageListener"></property> </bean> <!-- 同步user隊列結束 -->
mongo-config.xml
<!-- Default bean name is 'mongo' --> <mongo:mongo host="mongo.sustainable.com" port="27017" /> <bean id="mongoTemplate" class="org.springframework.data.mongodb.core.MongoTemplate"> <constructor-arg ref="mongo" /> <constructor-arg name="databaseName" value="test" /> </bean>
頁面仍是上個圖好了