• jersey2 整合 spring + hibernate + log4j2


    整合 spring

    jersey2 官方还未正式支持 spring4, 但网上有好多支持方案,折腾了一圈后,还是用了 spring3;

    pom 添加以下依赖配置

    		<!-- Spring --> 
    		<dependency>
    			<groupId>org.springframework</groupId>
    			<artifactId>spring-web</artifactId>
    			<version>4.3.1.RELEASE</version>
    		</dependency> 
    		<dependency>
    			<groupId>javax.servlet</groupId>
    			<artifactId>javax.servlet-api</artifactId>
    			<version>3.1.0</version>
    			<scope>provided</scope>
    		</dependency>
    		<dependency>
    			<groupId>org.glassfish.jersey.containers</groupId>
    			<artifactId>jersey-container-servlet</artifactId>
    		</dependency>
    		<dependency>
    			<groupId>org.glassfish.jersey.ext</groupId>
    			<artifactId>jersey-spring3</artifactId>
    		</dependency>
        </dependencies>
    
    

    添加 JerseyConfig 类

    package com.easymylife.app.sys;
     
    import org.glassfish.jersey.server.ResourceConfig;
    import org.glassfish.jersey.server.spring.scope.RequestContextFilter;
    
    
    public class JerseyConfig extends ResourceConfig {
    
        public JerseyConfig() {
            register(RequestContextFilter.class);
            packages("com.easymylife.app.sys");
            //register(LoggingFeature.class);
        }
    }
    
    

    添加 SpringAnnotationConfig 类

    package com.easymylife.app.sys;
    
    import org.springframework.context.annotation.ComponentScan;
    import org.springframework.context.annotation.Configuration;
    
    /**
     * Spring configuration to include our services
     *
     */
    @Configuration
    @ComponentScan(basePackageClasses = {})
    public class SpringAnnotationConfig {
    }
    
    
    

    然后在 main 中调用

            final JerseyConfig resourceConfig = new JerseyConfig();
            resourceConfig.property("contextConfig", new AnnotationConfigApplicationContext(SpringAnnotationConfig.class));
            
            final HttpServer server = GrizzlyHttpServerFactory.createHttpServer(URI.create(BASE_URI), resourceConfig, false);
            
    

    就可以通过 @Autowired 注解进行注入

    @Singleton
    @Path("spring-resource")
    @Service
    public class SpringRequestResource {
    
        AtomicInteger counter = new AtomicInteger();
    
    
    /*    @Autowired
        private GoodbyeService myGoodbyeService;*/
        
        @Autowired
        private ISaySthService saySthService;
        
        @GET
        @Path("saysth")
        @Produces(MediaType.TEXT_PLAIN)
        public String getSaySth(){
        	return this.saySthService.hello("Grissom");
        }
        
        @GET
        @Path("users")
        @Produces(MediaType.APPLICATION_JSON)
        public List<SysUser> getUsers(){
        	return this.saySthService.getUsers();
        }
        
    }
    
    

    整合 hibernate

    pom 配置

    
    	<!-- hibernate -->
    		<dependency>
    			<groupId>mysql</groupId>
    			<artifactId>mysql-connector-java</artifactId>
    			<version>5.1.21</version>
    		</dependency>
    		<dependency>
    			<groupId>org.hibernate</groupId>
    			<artifactId>hibernate-core</artifactId>
    			<version>5.2.10.Final</version>
    		</dependency>
    		<dependency>
    			<groupId>org.hibernate</groupId>
    			<artifactId>hibernate-validator</artifactId>
    			<version>5.4.0.Final</version>
    		</dependency>
    
    

    如果通过 JPA 方式打开数据库 Session, 则在 main/resources/META-INF/ 下添加 persistence.xml 配置,

    <?xml version="1.0" encoding="UTF-8" ?>
    <persistence xmlns="http://java.sun.com/xml/ns/persistence"
     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
     xsi:schemaLocation="http://java.sun.com/xml/ns/persistence
     http://java.sun.com/xml/ns/persistence/persistence_1_0.xsd" version="1.0">
    	<persistence-unit name="mysqlJPA" transaction-type="RESOURCE_LOCAL">
    		<properties>
    			<property name="hibernate.dialect" value="org.hibernate.dialect.MySQL5Dialect" />
    			<property name="hibernate.connection.driver_class" value="com.mysql.jdbc.Driver" />
    			<property name="hibernate.connection.username" value="username" />
    			<property name="hibernate.connection.password" value="yourpwd" />
    			<property name="hibernate.connection.url" value="jdbc:mysql://www.yourdomain.cn:3306/dbname" />
    			<property name="hibernate.max_fetch_depth" value="3" />
    			<property name="hibernate.hbm2ddl.auto" value="update" />
    		</properties>
    	</persistence-unit>
    </persistence>
    

    访问数据库代码

            EntityManagerFactory factory = Persistence.createEntityManagerFactory("mysqlJPA");  
            EntityManager em = factory.createEntityManager();  
            em.getTransaction().begin();
            Query query = em.createQuery("From SysUser");
            List<SysUser> user = query.getResultList();
    

    如果直接用 hibernate 创建 session, 则在 mian/resources 下添加 hibernate.cfg.xml

    
    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hibernate Configuration DTD 3.0//EN"
                                             "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">
    <hibernate-configuration>
     <session-factory name="hibernateSessionFactory">
      <property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>
      <property name="hibernate.connection.username">usernae</property>
      <property name="hibernate.connection.password">pwd</property>
      <property name="hibernate.connection.url">jdbc:mysql://www.yourdomain.cn:3306/dbname</property>
      <property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property>
      <property name="hibernate.show_sql">true</property>
      <property name="hibernate.format_sql">true</property>
    <!--   <property name="hibernate.hbm2ddl.auto">create</property> -->
      <mapping class="com.easymylife.app.sys.SysUser"/>
     </session-factory>
    </hibernate-configuration>
    
    

    代码

            Configuration configuration = new Configuration();
            configuration.configure("hibernate.cfg.xml");
                    
            sessionFactory = configuration.buildSessionFactory();
            Session session =  getInstance().sessionFactory.openSession();
            Query query = session.createQuery("from SysUser");
            List<SysUser> employees =  query.list();
            session.close();
            return employees;
    
    

    整合 log4j2

    pom

    		<dependency>
    			<groupId>org.apache.logging.log4j</groupId>
    			<artifactId>log4j-api</artifactId>
    			<version>2.8.2</version>
    		</dependency>
    		<dependency>
    			<groupId>org.apache.logging.log4j</groupId>
    			<artifactId>log4j-core</artifactId>
    			<version>2.8.2</version>
    		</dependency>
    
    

    main/resources 下添加 log4j2.xml

    <?xml version="1.0" encoding="UTF-8"?>
    
    <Configuration status="off" monitorInterval="1800">
    
        <properties>
            <property name="LOG_HOME">C:\logs</property>
            <property name="ERROR_LOG_FILE_NAME">error</property>
            <property name="INFO_LOG_FILE_NAME">info</property>
            <property name="DEBUG_LOG_FILE_NAME">debug</property>
        </properties>
    
    
        <Appenders>
            <Console name="Console" target="SYSTEM_OUT">
                <PatternLayout pattern="%d %-5p (%F:%L) - %m%n" />
            </Console>
    
            <RollingRandomAccessFile name="ErrorLog"
                                     fileName="${LOG_HOME}/${ERROR_LOG_FILE_NAME}.log"
                                     filePattern="${LOG_HOME}/${ERROR_LOG_FILE_NAME}.log.%d{yyyy-MM-dd}.gz">
                <PatternLayout
                        pattern="%d %-5p (%F:%L) - %m%n"/>
                <Policies>
                    <TimeBasedTriggeringPolicy/>
                    <SizeBasedTriggeringPolicy size="100 MB"/>
                </Policies>
                <DefaultRolloverStrategy max="20"/>
            </RollingRandomAccessFile>
            <RollingRandomAccessFile name="InfoLog"
                                     fileName="${LOG_HOME}/${INFO_LOG_FILE_NAME}.log"
                                     filePattern="${LOG_HOME}/${INFO_LOG_FILE_NAME}.log.%d{yyyy-MM-dd}.gz">
                <PatternLayout
                        pattern="%d %-5p (%F:%L) - %m%n"/>
                <Policies>
                    <TimeBasedTriggeringPolicy/>
                    <SizeBasedTriggeringPolicy size="100 MB"/>
                </Policies>
                <DefaultRolloverStrategy max="20"/>
            </RollingRandomAccessFile>
        </Appenders>
    
        <Loggers>
            <!-- 3rdparty Loggers -->
            <logger name="org.springframework.core" level="info">
            </logger>
            <logger name="org.springframework.beans" level="info">
            </logger>
            <logger name="org.springframework.context" level="info">
            </logger>
            <logger name="org.springframework.web" level="info">
            </logger>
            <Logger name="org.hibernate" level="debug">
               <appender-ref ref="InfoLog"/>
                 <appender-ref ref="Console"/>
            </Logger>
            <Logger name="org.hibernate.SQL" level="debug">
               <appender-ref ref="InfoLog"/>
                 <appender-ref ref="Console"/>
            </Logger>
    
            <logger name="com.easymylife.app.sys" level="error" includeLocation="true" additivity="false">
                <appender-ref ref="ErrorLog"/>
                <appender-ref ref="Console"/>
            </logger>
            <logger name="com.easymylife.app.sys" level="debug" includeLocation="true" additivity="false">
                <appender-ref ref="InfoLog"/>
                <appender-ref ref="Console"/>
            </logger>
            <root level="debug" includeLocation="true">
                <appender-ref ref="Console"/>
            </root>
        </Loggers>
    </Configuration>
    
    

    我完整的 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/maven-v4_0_0.xsd">
    
    	<modelVersion>4.0.0</modelVersion>
    
    	<groupId>com.easymylife.app</groupId>
    	<artifactId>sys</artifactId>
    	<packaging>jar</packaging>
    	<version>0.0.1-SNAPSHOT</version>
    	<name>sys</name>
    
    	<dependencyManagement>
    		<dependencies>
    			<dependency>
    				<groupId>org.glassfish.jersey</groupId>
    				<artifactId>jersey-bom</artifactId>
    				<version>${jersey.version}</version>
    				<type>pom</type>
    				<scope>import</scope>
    			</dependency>
    		</dependencies>
    	</dependencyManagement>
    
    	<dependencies>
    		<dependency>
    			<groupId>org.glassfish.jersey.containers</groupId>
    			<artifactId>jersey-container-grizzly2-http</artifactId>
    		</dependency>
    		<dependency>
    			<groupId>org.glassfish.jersey.media</groupId>
    			<artifactId>jersey-media-json-jackson</artifactId>
    			<version>2.25.1</version>
    		</dependency>
    		<dependency>
    			<groupId>junit</groupId>
    			<artifactId>junit</artifactId>
    			<version>4.9</version>
    			<scope>test</scope>
    		</dependency>
    		<dependency>
    			<groupId>org.glassfish.jersey.core</groupId>
    			<artifactId>jersey-client</artifactId>
    			<scope>test</scope>
    		</dependency>
    		<dependency>
    			<groupId>org.glassfish.jersey.core</groupId>
    			<artifactId>jersey-client</artifactId>
    			<version>2.25.1</version>
    			<scope>provided</scope>
    		</dependency>
    		<dependency>
    			<groupId>asm</groupId>
    			<artifactId>asm</artifactId>
    			<version>3.3.1</version>
    		</dependency>
    
    
    
    		<!-- Spring -->
    		<dependency>
    			<groupId>org.springframework</groupId>
    			<artifactId>spring-web</artifactId>
    			<version>${spring.version}</version>
    		</dependency>
    		<dependency>
    			<groupId>javax.servlet</groupId>
    			<artifactId>javax.servlet-api</artifactId>
    			<version>3.1.0</version>
    			<scope>provided</scope>
    		</dependency>
    		<dependency>
    			<groupId>org.glassfish.jersey.containers</groupId>
    			<artifactId>jersey-container-servlet</artifactId>
    		</dependency>
    		<dependency>
    			<groupId>org.glassfish.jersey.ext</groupId>
    			<artifactId>jersey-spring3</artifactId>
    		</dependency>
    
    		<!-- hibernate -->
    		<dependency>
    			<groupId>mysql</groupId>
    			<artifactId>mysql-connector-java</artifactId>
    			<version>5.1.21</version>
    		</dependency>
    		<dependency>
    			<groupId>org.hibernate</groupId>
    			<artifactId>hibernate-core</artifactId>
    			<version>5.2.10.Final</version>
    		</dependency>
    		<dependency>
    			<groupId>org.hibernate</groupId>
    			<artifactId>hibernate-validator</artifactId>
    			<version>5.4.0.Final</version>
    		</dependency>
    		<dependency>
    			<groupId>org.apache.logging.log4j</groupId>
    			<artifactId>log4j-api</artifactId>
    			<version>2.8.2</version>
    		</dependency>
    		<dependency>
    			<groupId>org.apache.logging.log4j</groupId>
    			<artifactId>log4j-core</artifactId>
    			<version>2.8.2</version>
    		</dependency>
    	</dependencies>
    
    	<build>
    		<plugins>
    			<plugin>
    				<groupId>org.apache.maven.plugins</groupId>
    				<artifactId>maven-compiler-plugin</artifactId>
    				<version>2.5.1</version>
    				<inherited>true</inherited>
    				<configuration>
    					<source>1.6</source>
    					<target>1.6</target>
    				</configuration>
    			</plugin>
    			<plugin>
    				<groupId>org.codehaus.mojo</groupId>
    				<artifactId>exec-maven-plugin</artifactId>
    				<version>1.2.1</version>
    				<executions>
    					<execution>
    						<goals>
    							<goal>java</goal>
    						</goals>
    					</execution>
    				</executions>
    				<configuration>
    					<mainClass>com.easymylife.app.sys.Main</mainClass>
    				</configuration>
    			</plugin>
    		</plugins>
    	</build>
    
    	<properties>
    		<spring.version>4.3.1.RELEASE</spring.version>
    		<jersey.version>2.25.1</jersey.version>
    		<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    	</properties>
    </project>
    
    
    
  • 相关阅读:
    Mybatis学习随笔3
    Mybatis学习随笔2
    Mybatis学习随笔
    Java校招面试-什么是线程安全/不安全
    装饰器2
    装饰器
    默认传参的陷阱
    处理日志文件
    第二天
    用户登录
  • 原文地址:https://www.cnblogs.com/grissom007/p/7002657.html
Copyright © 2020-2023  润新知