服務提供者:
<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服務
運作結果,通路後 日志成功寫入資料庫