准备工作:
1、jdk安装
2、eclipse安装
3、maven安装
4、mysql安装(创建测试数据库:test)
5、postman安装(用于请求测试)
6、zookeeper安装配置(验证启动成功后继续下一步)
7、dubbo-admin安装配置(验证启动成功后继续下一步)
8、整合框架如下
一、新建maven工程
二、配置POM文件,集成springboot+mybatis+dubbo
POM配置如下
.
<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.heheda</groupId>
<artifactId>springboot-mybatis-dubbo</artifactId>
<version>0.0.1-SNAPSHOT</version>
<parent>
<!-- 依赖管理,引入以后在声明其它dependency的时候就不需要version -->
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>1.5.8.RELEASE</version>
<relativePath />
</parent>
<properties>
<!-- 声明项目配置依赖编码格式为 utf-8 -->
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<!-- java jdk 版本声明 可变更 根据自己配置去匹配 -->
<java.version>1.7</java.version>
<!-- maven compiler version-->
<maven.compiler.source>1.7</maven.compiler.source>
<maven.compiler.target>1.7</maven.compiler.target>
</properties>
<dependencies>
<!-- 对web开发的支持,包含了spring webmvc和tomcat等web开发的特性 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!-- spring boot核心,包括自动配置支持,日志和YAML -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
</dependency>
<!-- test -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
</dependency>
<!-- DevTools in Spring Boot 项目热部署 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
</dependency>
<!-- mysql DB-->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<scope>runtime</scope>
</dependency>
<!--整合mybatis所需的jar -->
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>1.3.1</version>
</dependency>
<!-- 阿里json处理 -->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.2.9</version>
</dependency>
<!-- SLF4J -->
<dependency>
<groupId>org.codehaus.janino</groupId>
<artifactId>janino</artifactId>
<version>3.0.7</version>
</dependency>
<!-- dubbo -->
<dependency>
<groupId>com.alibaba.boot</groupId>
<artifactId>dubbo-spring-boot-starter</artifactId>
<version>0.1.0</version>
<exclusions>
<exclusion>
<groupId>com.alibaba</groupId>
<artifactId>dubbo</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>dubbo</artifactId>
<version>2.6.2</version>
</dependency>
<!--引入zookeeper的客户端工具 consumer使用-->
<dependency>
<groupId>com.github.sgroschupf</groupId>
<artifactId>zkclient</artifactId>
<version>0.1</version>
</dependency>
<!-- rest -->
<dependency>
<groupId>javax.ws.rs</groupId>
<artifactId>javax.ws.rs-api</artifactId>
<version>2.0.1</version>
</dependency>
</dependencies>
<build>
<plugins>
<!-- 如果我们要直接Main启动spring,那么以下plugin必须要添加,否则是无法启动的。-->
<!-- 如果使用maven的spring-boot:run的话就不需要此配置 -->
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project
三、springboot,mybatis,dubbo相关配置application.yml
配置如下
.
java.runtime.version: 1.7
logging.home: logs
logging.level.my.comp: DEBUG
logging.level.my.boot: DEBUG
logging.level.com.alibaba: INFO
logging.level.org.springframework: INFO
logging.level.org.springframework.jdbc: DEBUG
logging.level.org.mybatis.spring: DEBUG
logging.level.org.apache.tomcat.jdbc: INFO
server:
port: 8090
tomcat:
max-threads: 200
basedir: .
accesslog:
enabled: true
directory: ${logging.home}
pattern: combined
spring.datasource:
url: jdbc:mysql://127.0.0.1:3306/test?useUnicode=true&characterEncoding=utf-8
username: root
password: 123456
driver-class-name: com.mysql.jdbc.Driver
initial-size: 10
max-active: 20
max-idle: 20
test-while-idle: true
validation-query: select 1
mybatis:
config-location: classpath:mybatis.xml
mapper-locations: classpath*:/mappers/**/**/*.xml
dubbo:
application:
name: springboot-dubbo-server1
protocol:
port: 3333
registry:
address: zookeeper://127.0.0.1:2181
timeout: 20000
check: false
consumer:
timeout: 30000
check: false
validation: true
provider:
retries: 0
scan:
base-packages: com.heheda
四、配置mybatis
mybatis.xml配置如下
.
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
<settings>
<setting name="logImpl" value="LOG4J"/>
</settings>
<typeAliases>
<package name="com.heheda.model"/>
</typeAliases>
</configuration>
四、配置Logback日志管理
logback.xml配置如下
.
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<include resource="org/springframework/boot/logging/logback/defaults.xml" />
<include resource="org/springframework/boot/logging/logback/console-appender.xml" />
<springProperty scope="context" name="LOG_HOME" source="logging.home"></springProperty>
<appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<FileNamePattern>${LOG_HOME}/springboot-dubbo-server.%d{yyyy-MM-dd}.log</FileNamePattern>
<maxHistory>365</maxHistory>
</rollingPolicy>
<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
<!--格式化输出:%d表示日期,%thread表示线程名,%-5level:级别从左显示5个字符宽度%msg:日志消息,%n是换行符-->
<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} ${LOG_LEVEL_PATTERN:-%5p} ${PID:- } --- [%15.15t] %-40.40logger{39} : %m%n${LOG_EXCEPTION_CONVERSION_WORD:-%wEx}</pattern>
</encoder>
</appender>
<appender name="ERROR" class="ch.qos.logback.core.rolling.RollingFileAppender">
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<FileNamePattern>${LOG_HOME}/springboot-dubbo-error.%d{yyyy-MM-dd}.log</FileNamePattern>
<maxHistory>365</maxHistory>
</rollingPolicy>
<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
<!--格式化输出:%d表示日期,%thread表示线程名,%-5level:级别从左显示5个字符宽度%msg:日志消息,%n是换行符-->
<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} ${LOG_LEVEL_PATTERN:-%5p} ${PID:- } --- [%15.15t] %-40.40logger{39} : %m%n${LOG_EXCEPTION_CONVERSION_WORD:-%wEx}</pattern>
</encoder>
<filter class="ch.qos.logback.core.filter.EvaluatorFilter">
<evaluator class="ch.qos.logback.classic.boolex.JaninoEventEvaluator">
<expression>java.lang.Throwable.class.isInstance(throwable)</expression>
</evaluator>
<OnMismatch>DENY</OnMismatch>
<OnMatch>ACCEPT</OnMatch>
</filter>
</appender>
<root level="INFO">
<appender-ref ref="CONSOLE" />
<appender-ref ref="FILE" />
<appender-ref ref="ERROR" />
</root>
</configuration>
五、启动类Application编写
Application启动类代码如下
.
package com.heheda.controller;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.transaction.annotation.EnableTransactionManagement;
import com.alibaba.dubbo.config.spring.context.annotation.EnableDubbo;
/**
* 注解@SpringBootApplication指定项目为springboot,由此类当作程序入口,自动装配 web 依赖的环境;
*
*/
@EnableDubbo
@SpringBootApplication(scanBasePackages = {"com.heheda"})
@MapperScan("com.heheda.mapper")
@EnableTransactionManagement//开启事务管理
public class Application {
// 在main方法中启动一个应用,即:这个应用的入口
public static void main(String[] args) {
// TODO Auto-generated method stub
SpringApplication.run(Application.class, args);
}
}
六、编写生产者1接口和实现类
HelloDubboService接口代码如下:
.
package com.heheda.service;
public interface HelloDubboService {
public String helloDubbo();
}
HelloDubboServiceImpl实现类代码如下:
.
package com.heheda.service.impl;
import org.springframework.stereotype.Component;
import com.alibaba.dubbo.config.annotation.Service;
import com.heheda.service.HelloDubboService;
@Service
public class HelloDubboServiceImpl implements HelloDubboService {
@Override
public String helloDubbo() {
return "hello dubbo1";
}
}
七、编写生产者2接口和实现类
HelloDubboService2 接口代码如下:
.
package com.heheda.service;
public interface HelloDubboService2 {
public String helloDubbo();
}
HelloDubboServiceImpl实现类代码如下:
.
package com.heheda.service.impl;
import org.springframework.stereotype.Component;
import com.alibaba.dubbo.config.annotation.Service;
import com.heheda.service.HelloDubboService;
import com.heheda.service.HelloDubboService2;
@Service
public class HelloDubboServiceImpl2 implements HelloDubboService2 {
@Override
public String helloDubbo() {
return "hello dubbo2";
}
}
八、编写消费者类并对外提供restful接口
HelloDubboController代码如下
.
package com.heheda.controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import com.alibaba.dubbo.config.annotation.Reference;
import com.heheda.service.HelloDubboService;
@RestController
public class HelloDubboController {
@Reference
private HelloDubboService helloDubboService;
@RequestMapping("helloDubbo")
public String helloDubbo() {
return helloDubboService.helloDubbo();
}
}
九、验证
1、启动工程,通过dubbo-admin观察
2、请求测试,返回成功
如有问题或者改进的地方欢迎交流。