eureka项目之Demo
一、搭建项目骨架
1.01 新建父项目demo 如下图所示:

1.02 创建eureka
创建项目成功后,创建eureka子项目,在项目名点右键新建module

1.03 引入依赖
然后在父项目中增加节点并引入springcloud
Maven 父子模块增加jar包依赖:先在父pom.xml中增加jar包依赖,再在子pom.xml中增加jar包依赖,子pom.xml中不带版本号
<dependencyManagement> <dependencies> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-dependencies</artifactId> <version>${spring-cloud.version}</version> <type>pom</type> <scope>import</scope> </dependency> </dependencies> </dependencyManagement>
然后在eureka中引入eureka-server包
<dependencies> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-netflix-eureka-server</artifactId> </dependency> </dependencies>
1.04 配置并启动eureka
1.04.1 拷贝父的DemoApplication到eureka新建包(com.wh.eureka)下面

1.04.2 在eureka新建配置文件application.yml 内容如下
项目名:eureka
端口号:8761
单节点不需要注册eureka
spring:
application:
name: eureka
server:
port: 8761
eureka:
client:
fetch-registry: false
# 不需要注册到注册中心
register-with-eureka: false
1.04.2 在eureka的application的启动类添加eurekaServer注解(@EnableEurekaServer)并启动项目
之后访问:http://localhost:8761/ 如图所示显示eureka的信息就启动成功了

1.05 配置log4j日志
父子项目分别引入lombok,然后在启动类添加@slf4j
<!-- ## demo--> <dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <version>1.18.22</version> <optional>true</optional> </dependency> <!-- ## eureka--> <dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <optional>true</optional> </dependency>
添加log4j的配置文件(在配置文件夹中新增logback.xml)内容如下(只是简单的日志格式及日志级别输出):
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE configuration> <configuration scan="true" scanPeriod="60 seconds" debug="false"> <!--控制台输出 --> <appender name="console" class="ch.qos.logback.core.ConsoleAppender"> <encoder> <pattern>%d{HH:mm:ss} [%thread] %-5level %logger{36} - %msg%n</pattern> </encoder> </appender> <root> <level value="INFO" /> <appender-ref ref="console"/> </root> </configuration>
修改启动类打印日志
@Slf4j @EnableEurekaServer @SpringBootApplication public class EurekaApplication { public static void main(String[] args) { ConfigurableApplicationContext run = SpringApplication.run(EurekaApplication.class, args); log.info("启动eureka成功 地址: http://localhost:{}/", run.getEnvironment().getProperty("server.port")); } }
然后启动项目可以正常看到打印启动eureka的日志
1.05 添加System模块
1.05.1 新增子模块System

1.05.2 启动system
新增包com.wh.system,然后拷贝EurekaApplication的启动类到System里,修改名字为SystemApplication。
该组件需要注册Eureka,所以配置eurekaClient。
引入jar包 高版本的boot需要引入web,不然会报错:AbstractDiscoveryClientOptionalArgs
<dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency>
修改配置文件,日志及启动类日志打印
http://localhost:8761/eureka/ 上面Eureka的地址
spring:
application:
name: system
server:
port: 9001
eureka:
client:
service-url:
defaultZone: http://localhost:8761/eureka/
@Slf4j @SpringBootApplication @EnableEurekaClient public class SystemApplication {
然后启动分别启动Eureka和system。
启动后访问Eureka:http://localhost:8761/
可以看到Instances currently registered with Eureka下面
多了个system节点,我们的system就注册到Eureka上了。
1.6 添加Gateway模块
1.06.1 添加子模块Gateway
<dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-gateway</artifactId> </dependency> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId> </dependency> <dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> </dependency>
配置文件如下:
spring:
application:
name: gateway
server:
port: 9002
eureka:
client:
service-url:
defaultZone: http://localhost:8761/eureka/
然后启动gateway,
可以看到Instances currently registered with Eureka下面
多了个gateway节点,我们的gateway就注册到Eureka上了。

1.06.2 gateway增加system路由转发配置
在gateway的配置文件中添加cloud.gateway配置如下:
配置system指向启动的system项目端口
spring:
application:
name: gateway
cloud:
gateway:
routes:
- id: system
uri: http://127.0.0.1:9001
predicates:
- name: Path
args:
- /system/**
server:
port: 9002
eureka:
client:
service-url:
defaultZone: http://localhost:8761/eureka/
1.06.3 调试gateway路由转发功能
给system添加项目路径:
context-path: /system
在system添加一个TestController并访问system成功
然后分别启动Eureka、system、gateway
然后访问gateway服务器:http://127.0.0.1:9002/system/test
gateway路由转发配置system转发给system项目,test是RequestMapping路径。
正常访问,就是路由转发成功。
1.07 项目添加git管理
1.07.1 建立git项目略
1.07.2 项目关联git仓库
git init 初始化项目 git remote add origin https://gitee.com/123/eureka-demo.git 添加远程仓库地址 git commit -m '初始化项目' 提交本地仓库 git push -f origin master 强制推送远程
1.08 集成MyBatis框架
1.08.1 IDEA数据库可视化工具配置数据库连接
然后输入数据库连接和账号密码

如果下发提示missing driver files的话,点击下载驱动,下载成功后点击下面的 Test Connection 测试连接

然后点击Apply ,ok,就可以了
1.08.2 system集成mybatis
引入MyBatis依赖包
<dependency> <groupId>org.mybatis.spring.boot</groupId> <artifactId>mybatis-spring-boot-starter</artifactId> <version>2.1.4</version> </dependency> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>5.1.48</version> </dependency>
顺便引入两个第三方工具包
<dependency> <groupId>commons-io</groupId> <artifactId>commons-io</artifactId> <version>2.11.0</version> </dependency> <dependency> <groupId>org.apache.commons</groupId> <artifactId>commons-lang3</artifactId> <version>3.4</version> </dependency>
system引入mybatis第三方包
<dependency> <groupId>org.mybatis.spring.boot</groupId> <artifactId>mybatis-spring-boot-starter</artifactId> </dependency> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> </dependency>
然后使用idea连接数据库可视化工具创建表

create table Test ( id int auto_increment, name varchar(10), PRIMARY KEY (`id`) ); insert into Test ( name) values ('1'); insert into Test ( name) values ('2'); insert into Test ( name) values ('3'); insert into Test ( name) values ('4');
然后编写Controller、service、mapper和实体类以及mybatis.xml文件
结构如下图所示

然后system项目,然后访问地址就可以获取到数据
1.09 项目集成devtools热部署
在需要热部署的项目pom.xml添加下面两个配置
热部署依赖
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-devtools</artifactId> <scope>runtime</scope> <optional>true</optional> </dependency>
热部署配置
<build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> <configuration> <fork>true</fork> <!-- 如果没有该配置,devtools不会生效 --> </configuration> </plugin> </plugins> </build>
1.10 新增公共模块server
1.10.1 建立server module
-
1、新建module server
-
2、新建包 com.wh.server
-
3、拷贝启动类 并命名为ServerApplication
-
4、修改启动类日志输出
-
5、拷贝application.yml配置文件 ,修改端口号为9003,修改服务名Server,
-
6、server为公共模块,存放mybatis、实体类等,直接拷贝system的pom文件中的依赖及热部署配置
-
7、新增mapper、server等包,新增resource下面mapper用于存放MyBatis的xml文件 或
- 7、拷贝system里面的mapper、server、doman、Controller和resource下面的MyBatis的xml文件 修改包名
启动项目,后正常访问即可
1.10.2 system依赖server并启动正常访问
server模块不需要Controller和application 删除即可,作为jar包被依赖,配置文件也可以删除多余配置。

注:server配置文件的路径要放在resource/config/下面,不能和上层的路径一样放在resource根目录下,springboot会默认扫描resource/config下面
server模块的结构如下:

然后将system里面的跟server重复的删除,改为引用server的。修改后的system如下。

父项目包管理依赖server及system子项目依赖server
<!-- 父项目依赖--> <dependency> <groupId>com.wh</groupId> <artifactId>server</artifactId> <version>0.0.1-SNAPSHOT</version> </dependency> <!-- 子项目依赖--> <dependency> <groupId>com.wh</groupId> <artifactId>server</artifactId> </dependency>
启动system后访问Controller,正常读取数据库及返回数据。
1.11 项目集成mybatis-generator
在父项目引入 build
<build> <plugins> <!-- mybatis generator 自动生成代码插件 --> <plugin> <groupId>org.mybatis.generator</groupId> <artifactId>mybatis-generator-maven-plugin</artifactId> <version>1.3.7</version> <configuration> <configurationFile>src/main/resources/generator/generatorConfig.xml</configurationFile> <overwrite>true</overwrite> <verbose>true</verbose> </configuration> <dependencies> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>5.1.48</version> </dependency> </dependencies> </plugin> </plugins> </build>
加入插件后,domain、mapper等放到公共模块server里面,所以我们把generatorConfig.xml放到server项目的路径下面
src/main/resources/generator/generatorConfig.xml
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE generatorConfiguration PUBLIC "-//mybatis.org//DTD MyBatis Generator Configuration 1.0//EN" "http://mybatis.org/dtd/mybatis-generator-config_1_0.dtd"> <generatorConfiguration> <context id="Mysql" targetRuntime="MyBatis3" defaultModelType="flat"> <property name="autoDelimitKeywords" value="true"/> <!-- 表名增加单引号,避免mysql关键字--> <property name="beginningDelimiter" value="`"/> <property name="endingDelimiter" value="`"/> <!--覆盖生成XML文件 解决mapper.xml重复生成代码的问题--> <plugin type="org.mybatis.generator.plugins.UnmergeableXmlMappersPlugin" /> <!-- 生成的实体类添加toString()方法 --> <plugin type="org.mybatis.generator.plugins.ToStringPlugin" /> <!-- 不生成注释 --> <commentGenerator> <property name="suppressAllComments" value="true"/> </commentGenerator> <jdbcConnection driverClass="com.mysql.jdbc.Driver" connectionURL="jdbc:mysql://101.34.245.14:3306/courseimooc??useUnicode=true&characterEncoding=utf-8&useSSL=false&serverTimezone=Asia/Shanghai" userId="root" password="n4Y6kTs3VNz9jUFD"> </jdbcConnection> <!-- domain类的位置 --> <javaModelGenerator targetProject="src\main\java" targetPackage="com.wh.server.domain"/> <!-- mapper xml的位置 --> <sqlMapGenerator targetProject="src\main\resources" targetPackage="mapper"/> <!-- mapper类的位置 --> <javaClientGenerator targetProject="src\main\java" targetPackage="com.wh.server.mapper" type="XMLMAPPER" /> <!-- 三种生成方式:ANNOTATEDMAPPER:生成的SQL全在java中 MIXEDMAPPER:SQL部分在java中,部分在xml中 XMLMAPPER:生成的sql全都在xml中 --> <table tableName="a_user" domainObjectName="AUser"/> </context> </generatorConfiguration>
再次新建测试表
create table a_user( id int auto_increment, name varchar(10), primary key (id) )
generatorConfig.xml 最下面table节点添加新建的测试类,示例xml已经添加,然后编辑maven运行命令:
mybatis-generator:generate -e
然后运行编辑的maven命令,就会自动生成实体类和mapper类文件及xml文件。
插入数据,因为System依赖的server,所以可以在System的test类测试生成的mapper文件。
INSERT INTO `a_user` ( `name`) VALUES ( '张三'); INSERT INTO `a_user` ( `name`) VALUES ( '李四'); INSERT INTO `a_user` ( `name`) VALUES ( '王五');
package com.wh.system; import com.wh.server.domain.AUser; import com.wh.server.mapper.AUserMapper; import org.junit.jupiter.api.Test; import org.mybatis.spring.annotation.MapperScan; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.boot.test.context.SpringBootTest; import org.springframework.context.annotation.ComponentScan; import java.util.List; @MapperScan("com.wh.server.mapper") @ComponentScan("com.wh") @SpringBootTest(classes = SpringBootApplication.class) class SystemApplicationTests { @Autowired AUserMapper userMapper; @Test void contextLoads() { List<AUser> aUsers = userMapper.selectByExample(null); System.out.println(aUsers); } }
运行后正常打印数据。注册eureka失败的可以暂时不用管。因为eureka没有启动


浙公网安备 33010602011771号