复习springMVC+hibernate+dubboProvider搭建框架

来源:互联网 发布:手机淘宝一排三个图片 编辑:程序博客网 时间:2024/04/30 11:29

1.项目结构


2.配置文件

spring-dubbo.xml

<?xml version="1.0" encoding="UTF-8"?><beans xmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xmlns:aop="http://www.springframework.org/schema/aop"xmlns:tx="http://www.springframework.org/schema/tx"xmlns:context="http://www.springframework.org/schema/context"xmlns:dubbo="http://code.alibabatech.com/schema/dubbo"xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.1.xsdhttp://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.1.xsdhttp://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.1.xsdhttp://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.1.xsd    http://code.alibabatech.com/schema/dubbo    http://code.alibabatech.com/schema/dubbo/dubbo.xsd" ><!-- 提供方应用信息,用于计算依赖关系 --><dubbo:application name="${dubbo.application}" /> <!--  需要注册服务--> <dubbo:registry protocol="zookeeper" address="${dubbo.registry}" /><!-- 配置注册中心 /--><!--<dubbo:registry address="N/A" />-->  <!-- 用dubbo协议在20880端口暴露服务 direct:所有消息都不派发到线程池,全部在IO线程上直接执行 --><dubbo:protocol name="dubbo" port="${provider.protocol}"  accesslog="${provider.accesslog}" /><!-- 声明需要暴露的服务接口  retries:关闭写入方法的重试--><dubbo:service interface="com.ylz.dubbo.server.UserInfoServer" ref="UserInfoServer" retries="${provider.retries}" timeout="${provider.timeout}" version="${provider.version}"/></beans>


pom.xml

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><groupId>com.ylz</groupId><artifactId>provider</artifactId><version>0.0.1</version><packaging>jar</packaging><name>dubboProviderTest Maven</name><url>http://maven.apache.org</url><description>dubboProviderTest Maven</description><properties><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding><spring.version>3.2.0.RELEASE</spring.version><hibernate.version>4.3.8.Final</hibernate.version><jackson.version>2.5.0</jackson.version></properties><build><finalName>provider_${project.version}</finalName><sourceDirectory>src/main/java</sourceDirectory><resources><resource><targetPath>${project.build.directory}/classes</targetPath><directory>src/main/resources</directory><filtering>true</filtering> <includes><include>spring*.xml</include><include>*.properties</include></includes></resource></resources><plugins><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-war-plugin</artifactId><configuration><failOnMissingWebXml>false</failOnMissingWebXml></configuration></plugin></plugins></build><dependencies><!-- 引入本地工程 --><dependency><groupId>com.ylz</groupId><artifactId>dto</artifactId><version>0.0.1</version></dependency><dependency><groupId>commons-lang</groupId><artifactId>commons-lang</artifactId><version>2.6</version></dependency><dependency><groupId>commons-beanutils</groupId><artifactId>commons-beanutils</artifactId><version>1.8.3</version></dependency><!-- spring --><dependency><groupId>org.springframework</groupId><artifactId>spring-core</artifactId><version>${spring.version}</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-beans</artifactId><version>${spring.version}</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-context</artifactId><version>${spring.version}</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-tx</artifactId><version>${spring.version}</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-web</artifactId><version>${spring.version}</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-test</artifactId><version>${spring.version}</version><scope>test</scope></dependency><!-- spring aop编程 --><dependency><groupId>org.springframework</groupId><artifactId>spring-aspects</artifactId><version>3.2.0.RELEASE</version></dependency><!-- 关系型数据库整合时需配置 如hibernate jpa等 --><!-- hibernate --><dependency><groupId>org.hibernate.javax.persistence</groupId><artifactId>hibernate-jpa-2.0-api </artifactId><version>1.0.1.Final</version></dependency><dependency><groupId>org.hibernate</groupId><artifactId>hibernate-core</artifactId><version>4.1.9.Final</version></dependency><dependency><groupId>org.hibernate</groupId><artifactId>hibernate-ehcache</artifactId><version>4.1.9.Final</version></dependency><!-- c3p0数据源 --><dependency><groupId>com.mchange</groupId><artifactId>c3p0</artifactId><version>0.9.5-pre10</version></dependency><!-- 使用Spring配置 --><dependency><groupId>org.springframework</groupId><artifactId>spring-context-support</artifactId><version>4.0.2.RELEASE</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-orm</artifactId><version>${spring.version}</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-jms</artifactId><version>${spring.version}</version></dependency><dependency><groupId>org.springframework.data</groupId><artifactId>spring-data-redis</artifactId><version>1.0.2.RELEASE</version></dependency><!-- mysql连接 --><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>5.1.34</version></dependency><!-- servlet --><dependency><groupId>javax.servlet</groupId><artifactId>javax.servlet-api</artifactId><version>3.1.0</version><type>jar</type><scope>provided</scope></dependency><!-- json --><!-- <dependency> <groupId>com.alibaba</groupId> <artifactId>fastjson</artifactId> <version>1.2.3</version> </dependency> <dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-annotations</artifactId> <version>${jackson.version}</version> </dependency> <dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-core</artifactId> <version>${jackson.version}</version> </dependency> <dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-databind</artifactId> <version>${jackson.version}</version> </dependency> --><dependency><groupId>com.fasterxml.jackson.dataformat</groupId><artifactId>jackson-dataformat-xml</artifactId><version>2.2.3</version></dependency><!-- log4j --><dependency><groupId>log4j</groupId><artifactId>log4j</artifactId><version>1.2.16</version></dependency><!-- dubbo zookeeper 相关 --><dependency><groupId>com.101tec</groupId><artifactId>zkclient</artifactId><version>0.4</version></dependency><dependency><groupId>com.alibaba</groupId><artifactId>dubbo</artifactId><version>2.5.2</version><exclusions><exclusion><artifactId>spring</artifactId><groupId>org.springframework</groupId></exclusion></exclusions></dependency><dependency><groupId>org.apache.zookeeper</groupId><artifactId>zookeeper</artifactId><version>3.4.6</version><exclusions><exclusion><artifactId>jmxtools</artifactId><groupId>com.sun.jdmk</groupId></exclusion><exclusion><artifactId>jmxri</artifactId><groupId>com.sun.jmx</groupId></exclusion><exclusion><artifactId>jms</artifactId><groupId>javax.jms</groupId></exclusion></exclusions></dependency></dependencies></project>


spring.xml

<?xml version="1.0" encoding="UTF-8"?>  <beans xmlns="http://www.springframework.org/schema/beans"      xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"    xmlns:context="http://www.springframework.org/schema/context"     xmlns:tx="http://www.springframework.org/schema/tx"      xmlns:aop="http://www.springframework.org/schema/aop"      xsi:schemaLocation="http://www.springframework.org/schema/beans              http://www.springframework.org/schema/beans/spring-beans-4.1.xsd              http://www.springframework.org/schema/context              http://www.springframework.org/schema/context/spring-context-4.1.xsd            http://www.springframework.org/schema/tx           http://www.springframework.org/schema/tx/spring-tx-4.1.xsd          http://www.springframework.org/schema/aop           http://www.springframework.org/schema/aop/spring-aop-4.1.xsd">               <!-- 加载配置文件 -->     <bean id="propertyConfigurer" class="com.ylz.CustomConfig"><property name="locations"><list><value>classpath:config.properties</value></list></property></bean>     <!-- 扫描service自动注入为bean -->      <context:component-scan base-package="com.ylz" />    <!-- 开启AOP监听 只对当前配置文件有效 --><aop:aspectj-autoproxy expose-proxy="true"/><!-- 导入hibernate服务配置 --><import resource="classpath:hibernate.xml" /><!-- 导入dubbo服务配置 --><!-- <import resource="classpath:spring-dubbo.xml" /> --></beans> 


hibernate.xml

<?xml version="1.0" encoding="UTF-8"?>  <beans xmlns="http://www.springframework.org/schema/beans"      xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"    xmlns:context="http://www.springframework.org/schema/context"     xmlns:tx="http://www.springframework.org/schema/tx"      xmlns:aop="http://www.springframework.org/schema/aop"      xsi:schemaLocation="http://www.springframework.org/schema/beans              http://www.springframework.org/schema/beans/spring-beans-4.1.xsd              http://www.springframework.org/schema/context              http://www.springframework.org/schema/context/spring-context-4.1.xsd            http://www.springframework.org/schema/tx           http://www.springframework.org/schema/tx/spring-tx-4.1.xsd          http://www.springframework.org/schema/aop           http://www.springframework.org/schema/aop/spring-aop-4.1.xsd">              <!-- 配置hibernate -->      <!-- 配置数据源 c3p0 -->      <bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource"          destroy-method="close">          <property name="driverClass" value="${jdbc.driver}" />          <property name="jdbcUrl" value="${jdbc.url}" />          <property name="user" value="${jdbc.username}" />          <property name="password" value="${jdbc.password}" />            <!-- 请求超时时间 -->          <property name="checkoutTimeout" value="30000" />          <!-- 每60秒检查所有连接池中的空闲连接。默认值: 0,不检查 -->          <property name="idleConnectionTestPeriod" value="30" />          <!-- 连接数据库连接池最大空闲时间 -->          <property name="maxIdleTime" value="30" />          <!-- 连接池初始化连接数 -->          <property name="initialPoolSize" value="5" />          <property name="minPoolSize" value="5" />          <property name="maxPoolSize" value="20" />          <!--当连接池中的连接耗尽的时候c3p0一次同时获取的连接数。默认值: 3 -->          <property name="acquireIncrement" value="5" />      </bean>        <!-- 配置hibernate的SessionFactory -->      <bean id="sessionFactory"          class="org.springframework.orm.hibernate4.LocalSessionFactoryBean">          <!-- 注入数据源 相关信息看源码 -->          <property name="dataSource" ref="dataSource" />          <!-- hibernate配置信息 -->          <property name="hibernateProperties">              <props>                  <prop key="hibernate.dialect">${hibernate.dialect}</prop>                  <prop key="hibernate.show_sql">${hibernate.show_sql}</prop>                  <prop key="hibernate.format_sql">${hibernate.format_sql}</prop>                  <prop key="hibernate.hbm2ddl.auto">${hibernate.hbm2ddl.auto}</prop>                    <!-- 开启二级缓存 ehcache -->                  <prop key="hibernate.cache.use_second_level_cache">${hibernate.cache.use_second_level_cache}</prop>                  <prop key="hibernate.cache.use_query_cache">${hibernate.cache.use_query_cache}</prop>                  <prop key="hibernate.cache.region.factory_class">${hibernate.cache.region.factory_class}</prop>                  <prop key="hibernate.cache.provider_configuration_file_resource_path">${hibernate.cache.provider_configuration_file_resource_path}                  </prop>              </props>          </property>          <!-- 扫描hibernate注解配置的entity -->          <property name="packagesToScan" value="com.ylz" />      </bean>        <!-- 配置事务管理器 -->      <bean id="transactionManager"          class="org.springframework.orm.hibernate4.HibernateTransactionManager">          <property name="sessionFactory" ref="sessionFactory" />      </bean>       <!-- 开启注解事务 只对当前配置文件有效 --><tx:annotation-driven transaction-manager="txManager" order="100"/><bean id="txManager" class="org.springframework.orm.hibernate4.HibernateTransactionManager"><property name="sessionFactory" ref="sessionFactory"/></bean></beans> 

 


config.properties

#applicationconfigs#jdbcc3p0configjdbc.driver=com.mysql.jdbc.Driverjdbc.url=jdbc:mysql://localhost:3306/css?useUnicode=true&characterEncoding=utf-8jdbc.username=rootjdbc.password=root#hibernateconfighibernate.dialect=org.hibernate.dialect.MySQLDialecthibernate.show_sql=truehibernate.format_sql=falsehibernate.hbm2ddl.auto=update#hibernate.cache.use_second_level_cache=truehibernate.cache.use_query_cache=truehibernate.cache.region.factory_class=org.hibernate.cache.ehcache.EhCacheRegionFactoryhibernate.cache.provider_configuration_file_resource_path=ehcache.xml#listenerstopportstop.port=10882

log4j.properties

### set log levels ###  log4j.rootLogger = INFO , C , D , E     ### console ###  log4j.appender.C = org.apache.log4j.ConsoleAppender  log4j.appender.C.Target = System.out  log4j.appender.C.layout = org.apache.log4j.PatternLayout  log4j.appender.C.layout.ConversionPattern = [springmvc_hibernate_demo][%p] [%-d{yyyy-MM-dd HH:mm:ss}] %C.%M(%L) | %m%n    ### log file ###  log4j.appender.D = org.apache.log4j.DailyRollingFileAppender  log4j.appender.D.File = ../logs/springmvc_hibernate_demo.log  log4j.appender.D.Append = true  log4j.appender.D.Threshold = INFO   log4j.appender.D.layout = org.apache.log4j.PatternLayout  log4j.appender.D.layout.ConversionPattern = [springmvc_hibernate_demo][%p] [%-d{yyyy-MM-dd HH:mm:ss}] %C.%M(%L) | %m%n    ### exception ###  log4j.appender.E = org.apache.log4j.DailyRollingFileAppender  log4j.appender.E.File = ../logs/springmvc_hibernate_demo_error.log   log4j.appender.E.Append = true  log4j.appender.E.Threshold = ERROR   log4j.appender.E.layout = org.apache.log4j.PatternLayout  log4j.appender.E.layout.ConversionPattern = [sspringmvc_hibernate_demo][%p] [%-d{yyyy-MM-dd HH:mm:ss}] %C.%M(%L) | %m%n  

CustomConfig.java

package com.ylz;import java.util.HashMap;  import java.util.Map;  import java.util.Properties;    import org.springframework.beans.BeansException;  import org.springframework.beans.factory.config.ConfigurableListableBeanFactory;  import org.springframework.beans.factory.config.PropertyPlaceholderConfigurer;    
/** * 用PropertyPlaceholderConfigurer在加载上下文的时候暴露properties * @author Auser * */public class CustomConfig extends PropertyPlaceholderConfigurer {        private static Map<String, String> ctxPropertiesMap;        @Override      protected void processProperties(ConfigurableListableBeanFactory beanFactory,              Properties props)throws BeansException {            super.processProperties(beanFactory, props);          //load properties to ctxPropertiesMap          ctxPropertiesMap = new HashMap<String, String>();          for (Object key : props.keySet()) {              String keyStr = key.toString();              String value = props.getProperty(keyStr);              ctxPropertiesMap.put(keyStr, value);          }      }        //static method for accessing context properties      public static String getContextProperty(String name) {          return ctxPropertiesMap.get(name);      }  }  

手动启动spring框架
StartServer.java

package com.ylz;import java.io.BufferedReader;import java.io.IOException;import java.io.InputStream;import java.io.InputStreamReader;import java.net.ServerSocket;import java.net.Socket;import org.apache.commons.lang.math.NumberUtils;import org.apache.log4j.Logger;import org.springframework.context.support.ClassPathXmlApplicationContext;import com.ylz.tools.util.StringUtil;/** * <一句话功能简述> * <功能详细描述> *  * @author  Administrator * @version  [版本号, 2015-4-15] * @see  [相关类/方法] * @since  [产品/模块版本] */public class StartServer{private static final Logger logger = Logger.getLogger(StartServer.class);@SuppressWarnings("resource")public static void main(String[] args) {try {final ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext(new String[] { "spring.xml" });context.start();// 监听端口String port = CustomConfig.getContextProperty("stop.port");System.out.println(port);if (StringUtil.isEmpty(port) || !NumberUtils.isNumber(port)) {// 正常退出程序System.exit(0);}// 启动监听程序Listener listener = new Listener(Integer.parseInt(port));Thread run = new Thread(listener);run.start();} catch (Exception e) {// TODO: handle exceptionlogger.error(e.getMessage(), e);System.exit(0);}}}class Listener implements Runnable{        private static final Logger logger = Logger.getLogger(StopServer.class);        ServerSocket server = null;        Socket socket = null;        InputStream in = null;        BufferedReader br = null;        final int port;        protected Listener(int port)    {        this.port = port;    }        @Override    public void run()    {                try        {            server = new ServerSocket(port);            logger.info("Server stop listener == > \t port = > " + port);            socket = server.accept();            logger.info("Server stop action   == > \t port = > " + port);            in = socket.getInputStream();            //InputStreamReader将字节流转化为字符流            br = new BufferedReader(new InputStreamReader(in));            //行读取客户端数据            String info = br.readLine();            logger.info(info);        }        catch (IOException e)        {            logger.error(e);        }        finally        {            close(server, socket, in, br);                        try            {                // 此处可以执行关闭数据库连接等操作                Thread.sleep(5000l);            }            catch (InterruptedException e)            {                logger.error(e);            }            System.exit(0);        }    }        private void close(ServerSocket server, Socket socket, InputStream in, BufferedReader br)    {        try        {            if (null != br)                br.close();        }        catch (IOException e)        {            logger.error(e);        }        try        {            if (null != in)                in.close();        }        catch (IOException e)        {            logger.error(e);        }        try        {            if (null != socket && !socket.isClosed())                socket.close();        }        catch (IOException e)        {            logger.error(e);        }        try        {            if (server != null && !server.isClosed())                server.close();        }        catch (IOException e)        {            logger.error(e);        }    }}




1 0
原创粉丝点击