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

 新增子模块Gateway,新增包及拷贝修改启动类,修改配置文件端口使用9002,引入下面依赖
<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数据库可视化工具配置数据库连接

点击右侧的datebase,然后点击+号创建data source -> mysql

 

 然后输入数据库连接和账号密码

 如果下发提示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&amp;characterEncoding=utf-8&amp;useSSL=false&amp;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>
generatorConfig.xml

再次新建测试表

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没有启动

 

 

 

 

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

 

posted @ 2024-12-17 09:37  苦心明  阅读(129)  评论(0)    收藏  举报