- 如果因为MySQL的问题参考、
- war打包比较jar打包麻烦一点
- 我们微服务会有一个父工程,父工程打包的名字跟子包打包的名字不太一样
- 这里是代码
<packaging>pom</packaging>
- 我们还需要将父工程存放到maven仓库中
- 然后打包成功,在子模块的pom文件里引用即可
- 我们来看一下子模块如何打包
- pom文件
<?xml version="1.0" encoding="UTF-8"?>
<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 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>com.zhiyou100</groupId>
<!--这里是父工程的名字-->
<artifactId>server-parent</artifactId>
<version>0.0.1-SNAPSHOT</version>
</parent>
<groupId>com.zhiyou100</groupId>
<artifactId>weather-eureka</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>war</packaging>
<name>weather-eureka</name>
<description>服务注册中心</description>
<dependencies>
<!--这里是将内置的tomcat关掉-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-tomcat</artifactId>
<scope>provided</scope>
</dependency>
<!--这里是服务注册中心-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
</dependency>
<!--这里是web启动器,一定要加上-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>com.zhiyou100</groupId>
<artifactId>server-parent</artifactId>
<version>0.0.1-SNAPSHOT</version>
</dependency>
</dependencies>
</project>
- 然后我们来配置服务注册中心
#这里是防止端口号冲突所以改为8000
server.port=8000
#这里是服务中心的名字
spring.application.name=weather-eureka
#这里是本机的名字
eureka.instance.hostname=localhost
#这里是不将本服务注册到服务中心
eureka.client.register-with-eureka=false
eureka.client.fetch-registry=false
#这里是服务注册中心的核心配置
eureka.client.service-url.defaultZone=http://${eureka.instance.hostname}:${server.port}/eureka/
主类这里继承SpringBootServletInitializer,还实现SpringApplicationBuilder方法
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.builder.SpringApplicationBuilder;
import org.springframework.boot.web.servlet.support.SpringBootServletInitializer;
import org.springframework.cloud.netflix.eureka.server.EnableEurekaServer;
@SpringBootApplication
@EnableEurekaServer
public class WeatherEurekaApplication extends SpringBootServletInitializer {
@Override
protected SpringApplicationBuilder configure(SpringApplicationBuilder builder) {
// TODO Auto-generated method stub
return builder.sources(this.getClass());
}
public static void main(String[] args) {
SpringApplication.run(WeatherEurekaApplication.class, args);
}
}
接下来进行打包,双击package即可
- 这样我们的服务注册中心打包完成了
- 然后我们这里写一个提供者
- 第一步pom文件
<?xml version="1.0" encoding="UTF-8"?>
<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 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>com.zhiyou100</groupId>
<artifactId>server-parent</artifactId>
<version>0.0.1-SNAPSHOT</version>
</parent>
<groupId>com.zhiyou100</groupId>
<artifactId>city-data</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>war</packaging>
<name>city-data</name>
<description>城市数据获取</description>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-tomcat</artifactId>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>com.zhiyou100</groupId>
<artifactId>server-parent</artifactId>
<version>0.0.1-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-jdbc</artifactId>
</dependency>
<!--导入mybatis依赖-->
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>3.1.1</version>
</dependency>
<!--导入mysql依赖-->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.46</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!--eureka-client启动器-->
<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-thymeleaf</artifactId>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<optional>true</optional>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<version>RELEASE</version>
<scope>compile</scope>
</dependency>
</dependencies>
</project>
然后配置文件
#这里是开启Redis虚拟机的ip地址
spring.redis.host=139.224.66.202
#这里是Redis端口号6379
spring.redis.port=6379
spring.datasource.driver-class-name=com.mysql.jdbc.Driver
#这里是数据库的账号,一般都是root
spring.datasource.username=root
#这里是数据库密码
spring.datasource.password=这里是你的mysql密码
#这里是数据库链接池,我的外网服务器的ip是139.224.66.202,数据库名是pan
spring.datasource.url=jdbc:mysql://139.224.66.202/pan
#这里是扫描mapper下的xml文件
mybatis-plus.mapper-locations=classpath:mapper/*Mapper.xml
#为了防止端口号冲突,这里我们修改一下端口号
server.port=8321
#提交时的名字
spring.application.name=city-data
#提交到服务注册中心,我的外网服务器的ip地址是139.224.66.202,tomcat端口号是8080,注册中心打包的名字是weather-eureka,
#注册中心的名字是eureka
eureka.client.service-url.defaultZone=http://139.224.66.202:8080/weather-eureka/eureka/
主类上同样
extends SpringBootServletInitializer
方法
@Override
protected SpringApplicationBuilder configure(SpringApplicationBuilder builder) {
// TODO Auto-generated method stub
return builder.sources(this.getClass());
}
controller层来一个可以被访问接口
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class Hello {
@RequestMapping("gethello")
public String gethello(){
return "Hello word";
}
}
然后打包
- 这样我们的提供者就打包完成了
- 再写一个消费者就ok了
- 同样第一步pom文件
<?xml version="1.0" encoding="UTF-8"?>
<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 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>com.zhiyou100</groupId>
<artifactId>server-parent</artifactId>
<version>0.0.1-SNAPSHOT</version>
</parent>
<groupId>com.zhiyou100</groupId>
<artifactId>city-wather</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>war</packaging>
<name>city-wather</name>
<description>展示</description>
<properties>
<java.version>1.8</java.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-tomcat</artifactId>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>com.zhiyou100</groupId>
<artifactId>server-parent</artifactId>
<version>0.0.1-SNAPSHOT</version>
</dependency>
<!--lombok依赖-->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<optional>true</optional>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!--feign依赖-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-openfeign</artifactId>
<version>2.0.0.RELEASE</version>
</dependency>
<!--client依赖-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>
</dependencies>
</project>
然后配置文件
#这里是端口号为了防止端口号冲突改为了8312
server.port=8312
#这里是本服务的提交名字
spring.application.name=city-wather
#提交到服务注册中心,我的外网服务器的ip地址是139.224.66.202,tomcat端口号是8080,注册中心打包的名字是weather-eureka,
#注册中心的名字是eureka
eureka.client.service-url.defaultZone=http://139.224.66.202:8080/weather-eureka/eureka/
#这里是熔断器可以考虑加或者不加
feign.hystrix.enabled=true
创建一个service层这里要调用提供者服务
- 因为我这个是在外网上部署的所以url地址思考一下是否要加
- 如果出现http//city-wather/gethello可以考虑加上
- 然后我们在写一个controller层用来调用service层
import com.zhiyou100.citywather.service.ICityService;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import javax.annotation.Resource;
@RestController
public class Hello {
@Resource
private ICityService iCityService;
@RequestMapping(value = "hello")
public String hello(){
return iCityService.gethello();
}
}
这里的主类也是一样的
extends SpringBootServletInitializer
@Override
protected SpringApplicationBuilder configure(SpringApplicationBuilder builder) {
// TODO Auto-generated method stub
return builder.sources(this.getClass());
}
- 然后我们就可以去linux部署了
- 上来二话不说先复制3个tomcat
- 我这里用了一下工具,毕竟window系统上好复制
- 这样我们的三个tomcat就弄好了,前提是Linux系统上已将安装了Java和配置了Java的环境变量
- 然后我们来修改一下tomcat的端口号防止冲突,我们这里只修改两个就好
- 然后我们来编辑一下server.xml这个文件
vi server.xml
- 我们这里一共修改了五处
- 接下来我们修改下一个tomcat
- 也是修改server.xml文件
vi server.xml
- 同样这里也是五处
- 接下来我们就将大好的包传输到相应的tomcat下的webapps下
- 弄完以后我们需要运行tomcat,运行的话需要到bin目录下
- 这里是我的tomcat的路径
cd /usr/local/tomcat/apache-tomcat-9.0.0.M13/bin/
这里我们还需要加上一句话,不然没法运行
chmod u+x *.sh
然后
./startup.sh
其他的两个tomcat也是一样的
- 运行完成以后我们看一下服务注册中心
这样算是运行成功了