天天看點

springboot2.x、Dubbo、log4j2整合,親測有效(超詳細)

服務提供者:

<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.jacky</groupId>
	<artifactId>MyServer</artifactId>
	<packaging>war</packaging>
	<version>0.0.1-SNAPSHOT</version>
	<parent>
		<groupId>org.springframework.boot</groupId>
		<artifactId>spring-boot-starter-parent</artifactId>
		<version>2.0.3.RELEASE</version>
		<relativePath /> <!-- lookup parent from repository  -->
	</parent>
	<!--spring boot 編碼 -->
	<properties>
		<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
		<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
		<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <java.version>1.8</java.version>
        <curator-framework.version>4.0.1</curator-framework.version>
        <zookeeper.version>3.4.13</zookeeper.version>
        <dubbo.starter.version>0.2.0</dubbo.starter.version>
	</properties>

	<dependencies>
		<dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
 
        <dependency>
            <groupId>com.alibaba.boot</groupId>
            <artifactId>dubbo-spring-boot-starter</artifactId>
            <version>${dubbo.starter.version}</version>
        </dependency>
		
	</dependencies>

	<build>
		<finalName>MyServer</finalName>
		<pluginManagement>
			<plugins>
				<plugin>
					<artifactId>maven-clean-plugin</artifactId>
					<version>3.1.0</version>
				</plugin>
				<plugin>
					<artifactId>maven-resources-plugin</artifactId>
					<version>3.0.2</version>
				</plugin>
				<plugin>
					<artifactId>maven-compiler-plugin</artifactId>
					<version>3.8.0</version>
				</plugin>
				<plugin>
					<artifactId>maven-surefire-plugin</artifactId>
					<version>2.22.1</version>
				</plugin>
				<plugin>
					<artifactId>maven-war-plugin</artifactId>
					<version>3.2.2</version>
				</plugin>
				<plugin>
					<artifactId>maven-install-plugin</artifactId>
					<version>2.5.2</version>
				</plugin>
				<plugin>
					<artifactId>maven-deploy-plugin</artifactId>
					<version>2.8.2</version>
				</plugin>
			</plugins>
		</pluginManagement>
	</build>
</project>
           

application.properties

server.port=9090


dubbo.application.name=MyServerByJacky
dubbo.registry.address=zookeeper://127.0.0.1:2181
dubbo.protocol.name=dubbo
dubbo.protocol.port=20881
dubbo.scan.base-packages=com.jacky.service.impl
           
package com.jacky;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

import com.alibaba.dubbo.config.spring.context.annotation.EnableDubbo;

@SpringBootApplication
@EnableDubbo
public class MyServerApplication {
	public static void main(String[] args) {
		SpringApplication.run(MyServerApplication.class, args);
	}
}



package com.jacky.service.impl;

import com.alibaba.dubbo.config.annotation.Service;
import com.jacky.service.HelloService;

@Service
public class HelloServiceImpl implements HelloService {
	
	public String sayHi(String name) {
		return "hello " + name;
	}
}


package com.jacky.service;

public interface HelloService {
	public String sayHi(String name);
}


           

消費者:

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.jacky</groupId>
	<artifactId>HelloWorld</artifactId>
	<packaging>jar</packaging>
	<version>0.0.1-SNAPSHOT</version>
	<parent>
		<groupId>org.springframework.boot</groupId>
		<artifactId>spring-boot-starter-parent</artifactId>
		<version>2.0.3.RELEASE</version>
		<relativePath /> <!-- lookup parent from repository -->
	</parent>
	<!--spring boot 編碼 -->
	<properties>
		<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
		<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
		<java.version>1.8</java.version>
		<curator-framework.version>4.0.1</curator-framework.version>
		<zookeeper.version>3.4.13</zookeeper.version>
		<dubbo.starter.version>0.2.0</dubbo.starter.version>
	</properties>

	<dependencies>
		<!-- <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-jpa</artifactId> 
			</dependency> -->
		<!--spring boot web依賴 -->
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-web</artifactId>
			<exclusions>
				<exclusion>
					<groupId>org.springframework.boot</groupId>
					<artifactId>spring-boot-starter-logging</artifactId>
				</exclusion>
			</exclusions>
		</dependency>
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-log4j2</artifactId>
		</dependency>
		
		
		<dependency>
            <groupId>org.apache.curator</groupId>
            <artifactId>curator-framework</artifactId>
            <version>2.12.0</version>
        </dependency>

        <dependency>
            <groupId>com.alibaba.boot</groupId>
            <artifactId>dubbo-spring-boot-starter</artifactId>
            <version>0.2.1.RELEASE</version>
        </dependency>
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>dubbo</artifactId>
            <version>2.6.5</version>
        </dependency>
		
		
		<dependency>
			<groupId>org.apache.httpcomponents</groupId>
			<artifactId>httpclient</artifactId>
			<version>4.5.2</version>
		</dependency>
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-devtools</artifactId>
			<optional>true</optional>
		</dependency>

		<dependency>
			<groupId>mysql</groupId>
			<artifactId>mysql-connector-java</artifactId>
			<version>5.1.38</version>
		</dependency>

		<dependency>
			<groupId>com.alibaba</groupId>
			<artifactId>druid</artifactId>
			<version>1.0.18</version>
		</dependency>

		

	</dependencies>
	<!--spring boot maven插件 -->
	<build>
		<finalName>HelloWorld</finalName>
		<plugins>
			<plugin>
				<groupId>org.springframework.boot</groupId>
				<artifactId>spring-boot-maven-plugin</artifactId>
			</plugin>
		</plugins>
	</build>
</project>
           

log4j2_dev.xml

<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="WARN"> 
    <properties>
        <property name="LOG_HOME">D:/logs</property>
        <property name="FILE_NAME">mylog</property>
        <property name="log.sql.level">info</property>
        <property name="LOG_TABLE_NAME">log_table</property>
    </properties>
 
    <Appenders>  
        <Console name="Console" target="SYSTEM_OUT">  
            <PatternLayout pattern="eeee - %d{HH:mm:ss.SSS} [%t] %-5level %l - %msg%n" />  
        </Console>
 
        <RollingRandomAccessFile name="RollingRandomAccessFile" fileName="${LOG_HOME}/${FILE_NAME}.log" filePattern="${LOG_HOME}/$${date:yyyy-MM}/${FILE_NAME}-%d{yyyy-MM-dd}.log">
            <PatternLayout pattern="eeee - %d{HH:mm:ss.SSS} [%t] %-5level %l - %msg%n"/>
            <Policies>
                <TimeBasedTriggeringPolicy interval="1"/>
                <SizeBasedTriggeringPolicy size="10 MB"/>
            </Policies>
            <DefaultRolloverStrategy max="20"/>
        </RollingRandomAccessFile>

		<JDBC name="DatabaseAppender" tableName="${LOG_TABLE_NAME}">
			<ConnectionFactory class="com.jacky.config.LogConnectionFactory" method="getDataSourceConnection" />
			<Column name="log_date" pattern="%d{yyyy-MM-dd HH:mm:ss}" />
			<Column name="log_level" pattern="%p" />
			<Column name="log_class" pattern="%c" />
			<Column name="line_number" pattern="%L" />
			<Column name="log_detail" pattern="%m" />
		</JDBC>
    </Appenders>  
 
    <Loggers>
		<Root level="info">
			<AppenderRef ref="Console" />
			<AppenderRef ref="RollingRandomAccessFile" />
			<AppenderRef ref="DatabaseAppender" />
		</Root>

		<Logger name="com.jacky" level="${log.sql.level}" additivity="false">
			<AppenderRef ref="Console" />
			<AppenderRef ref="RollingRandomAccessFile" />
			<AppenderRef ref="DatabaseAppender" />
		</Logger>
    </Loggers>  
</Configuration>
           

log4j2-log.properties

log.datasource.url=jdbc:mysql://localhost:3306/logdb?useUnicode=true&characterEncoding=UTF-8&zeroDateTimeBehavior=convertToNull&useSSL=false&allowMultiQueries=true
log.datasource.username=root
log.datasource.pwd=root
log.datasource.driverClassName=com.mysql.jdbc.Driver
           

application.properties

server.port=8081


logging.config=classpath:log4j2_dev.xml


dubbo.application.name=MyConsumerByJacky
dubbo.registry.address=zookeeper://127.0.0.1:2181
dubbo.scan.base-packages=com.jacky.server

           
package com.jacky.server;

import org.springframework.stereotype.Service;

import com.alibaba.dubbo.config.annotation.Reference;
import com.jacky.service.HelloService;

@Service
public class MyClientServer {

	@Reference
	private HelloService helloService;
	
	public String sayHi(String name) {
		System.out.println(helloService);
		return helloService.sayHi(name);
	}
}
           
package com.jacky.config;

import java.sql.Connection;
import java.sql.SQLException;
import java.util.Properties;

import com.alibaba.druid.pool.DruidDataSource;
import com.alibaba.druid.pool.DruidDataSourceFactory;
import com.jacky.util.PropertiesUtil;

public class LogConnectionFactory {
	private static String resource = "log4j2-log.properties";
	private static String url = PropertiesUtil.getProperty(resource, "log.datasource.url");
	private static String driverClassName = PropertiesUtil.getProperty(resource, "log.datasource.driverClassName");
	private static String username = PropertiesUtil.getProperty(resource, "log.datasource.username");
	private static String psw = PropertiesUtil.getProperty(resource, "log.datasource.pwd");

	private DruidDataSource dataSource;
	private static LogConnectionFactory logConnectionFactory;

	public LogConnectionFactory() {
		super();
		System.out.println("inint LogConnectionFactory....");
	}

	protected void closeConnection(Connection con) {
		try {
			if (con != null && !con.isClosed()) {
				con.close();
			}
		} catch (SQLException e) {
			e.printStackTrace();
		}
	}

	protected Connection getConnection() throws SQLException {
		if (dataSource == null) {
			Properties result = new Properties();
			result.put("driverClassName", driverClassName);
			result.put("url", url);
			result.put("username", username);
			result.put("password", psw);
			try {
				dataSource = (DruidDataSource) DruidDataSourceFactory.createDataSource(result);
			} catch (Exception e) {
				try {
					uninitialize();// Druid資料庫源對象産生失敗後,取消初始化
				} catch (Exception e2) {
				}
			}
		}
		return dataSource.getConnection();
	}

	public void uninitialize() {
		try {
			if (dataSource != null) {
				dataSource.close();
			}
		} catch (Exception e) {
			e.printStackTrace();
		}
	}

	public static Connection getDataSourceConnection() throws SQLException {
		if (logConnectionFactory == null) {
			logConnectionFactory = new LogConnectionFactory();
		}
		return logConnectionFactory.getConnection();
	}
}
           
CREATE TABLE `log_table` (
  `id` int(11) NOT NULL AUTO_INCREMENT COMMENT '主鍵id',
  `log_date` datetime DEFAULT NULL COMMENT '日志日期時間',
  `log_level` varchar(32) DEFAULT NULL COMMENT '日志級别',
  `log_class` varchar(255) DEFAULT NULL COMMENT '日志所在的類',
  `line_number` int(255) DEFAULT NULL COMMENT '在類中的行數',
  `log_detail` longtext COMMENT '日志詳情',
  `user_ip` varchar(15) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;

           

啟動zookeeper服務

運作結果,通路後 日志成功寫入資料庫

springboot2.x、Dubbo、log4j2整合,親測有效(超詳細)

繼續閱讀