devtools集成微服务
devtools集成微服务
前置条件(确保以下环境已存在)
提示
- nacos环境
nacos在此处主要用作动态的服务发现、服务配置。Nacos详情
core starter依赖的数据源,此处以mysql数据库示例
redis环境
此处mysql,redis的配置集成在nacos配置管理的global.yml配置文件中
1.配置 Maven 私服仓库地址
注意
如开发环境没有外网,或访问公共仓库太慢,请联系客服,单独部署私服仓库。
请在开发工具中配置maven私服仓库,本教程以IDEA开发工具为例仅供参考:打开IDEA依次File > Other Settings > Default Settings进入Default Settings 设置框,Build, Execution, Deployment > Build Tools > Maven 进入maven工具配置,找到User settings file配置项中setting.xml配置文件路径,在mirrors中添加如下仓库地址。
<!--轻码猿maven仓库-->
<mirror>
<id>nexus</id>
<name>lightcode maven-public</name>
<mirrorOf>*</mirrorOf>
<url>http://maven.lightcode.com.cn/repository/maven-public/</url>
</mirror>2.添加license授权文件
- 请拷贝授权文件至指定路径,路径规则如下:
window:在当前用户目录/sysLicense/目录下
例如:C:\Documents and Settings\Administrator\sysLicense
linux:在当前用户目录/sysLicense/目录下
例如:/Users/mrluo/sysLicense
3. 创建新的Spring Boot项目
推荐使用 Spring Initializer (opens new window),快速初始化一个 Spring Boot 工程。 如果您使用IntelliJ IDEA,可以直接通过菜单: File -> New -> Project -> Spring Initializr 创建。
本文创建的工程名为 demo
4. pom文件引入maven依赖
更改parent依赖
<!-- 引入父依赖 -->
<parent>
<groupId>cn.com.lightcode.cloud</groupId>
<artifactId>lightcode-cloud</artifactId>
<version>1.0</version>
</parent><dependencies>下新增如下依赖
<!-- cloud依赖 -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-loadbalancer</artifactId>
</dependency>
<!-- cas依赖 -->
<dependency>
<groupId>org.springframework.security</groupId>
<artifactId>spring-security-cas</artifactId>
</dependency>
<!-- Nacos config & discovery -->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
</dependency>
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
<dependency>
<groupId>com.alibaba.nacos</groupId>
<artifactId>nacos-client</artifactId>
<version>1.4.2</version>
</dependency>
<!-- JDBC Driver mysql-->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.22</version>
</dependency>
<!-- core & devtools -->
<dependency>
<groupId>com.diboot</groupId>
<artifactId>diboot-core</artifactId>
<version>${diboot-cloud.version}</version>
</dependency>
<dependency>
<groupId>com.diboot</groupId>
<artifactId>diboot-devtools-spring-boot-starter</artifactId>
<version>${diboot-cloud.version}</version>
<scope>provided</scope><!--注:IDEA某些版本下provided无效,需删除此行,打包前手动剔除devtools依赖 -->
</dependency>
<dependency>
<groupId>com.diboot.cloud</groupId>
<artifactId>diboot-common-api</artifactId>
<version>${diboot-cloud.version}</version>
</dependency>
<!-- excel组件 -->
<dependency>
<groupId>com.diboot.cloud</groupId>
<artifactId>diboot-common-excel</artifactId>
<version>${diboot-cloud.version}</version>
</dependency>
<!-- 加载ORM相关组件 -->
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>${mybatis-plus.version}</version>
</dependency>如果spring boot项目需要打jar包运行,则需要参考如下配置确保打包时剔除devtools:
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<configuration>
<!-- 打jar包时剔除 -->
<excludes>
<exclude>
<groupId>com.diboot</groupId>
<artifactId>diboot-devtools-spring-boot-starter</artifactId>
</exclude>
</excludes>
</configuration>
</plugin>
</plugins>5. 添加配置信息
resources下创建 application.yml,bootstrap.yml两个配置文件,手动复制并更改对应参数
application.yml
注意更改devtools的信息
server:
port: 8080
servlet:
context-path: /
spring:
application:
name: demo
main:
allow-bean-definition-overriding: true
##diboot-devtools 配置
diboot:
devtools:
## 生成代码 开发者
codes-author: chenlq
## 域名
codes-copyright: www.lightcode.com
## 版本
codes-version: 0.0.1-SNAPSHOT
## 输出代码路径
output-path: demo/src/main/java/cn/com/lightcode/cloud/demo/
## 输出sql路径
output-path-sql: demo/src/main/resources/
## 前端项目路径
output-path-frontend: ../diboot-antd-admin/
## 是否启动lombok生成bean
enable-lombok: true
## 是否启动swagger生成
enable-swagger: true
generate-mapper-xml: truebootstrap.yml
将 ip:port 替换为nacos服务地址 , 引用global.yml配置文件
spring:
cloud:
nacos:
config:
server-addr: ip:port
file-extension: yaml
refresh-enabled: true
encode: UTF-8
config-retry-time: 30
shared-configs[0]:
data-id: global.yml
refresh: true
discovery:
## 服务中心注册地址
server-addr: ip:port
#namespace: 33ec9caf-a6b4-41ba-81d6-a7ea5dfe765c6. 代码配置
DemoApplication.class 启动类配置
@EnableFeignClients(value = {"com.diboot.cloud.service"})
@EnableDiscoveryClient
@EnableFeignClients(value = {"com.diboot.cloud.service"})
@EnableDiscoveryClient
@SpringBootApplication
public class DemoApplication {
public static void main(String[] args) {
SpringApplication.run(DemoApplication.class, args);
}
}启动类同级创建config包,包路径则为 cn.com.lightcode.cloud.demo.config,将如下两个配置类复制到config包下
ResourceServerConfig.class
package cn.com.lightcode.cloud.demo.config;
import com.diboot.cloud.handler.CustomAccessDeniedHandler;
import com.diboot.cloud.handler.CustomAuthenticationEntryPoint;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.cloud.context.config.annotation.RefreshScope;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.redis.connection.RedisConnectionFactory;
import org.springframework.security.config.annotation.method.configuration.EnableGlobalMethodSecurity;
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
import org.springframework.security.oauth2.config.annotation.web.configuration.EnableResourceServer;
import org.springframework.security.oauth2.config.annotation.web.configuration.ResourceServerConfigurerAdapter;
import org.springframework.security.oauth2.config.annotation.web.configurers.ResourceServerSecurityConfigurer;
import org.springframework.security.oauth2.provider.token.TokenStore;
import org.springframework.security.oauth2.provider.token.store.redis.RedisTokenStore;
/**
* 认证资源服务器启动入口
* @author luoy
* @version 1.0
*/
@RefreshScope
@Configuration
@EnableResourceServer
@EnableGlobalMethodSecurity(prePostEnabled = true)
public class ResourceServerConfig extends ResourceServerConfigurerAdapter {
@Value("${spring.application.name}")
private String resourceId = "demo";
@Autowired
private CustomAccessDeniedHandler customAccessDeniedHandler;
@Autowired
private CustomAuthenticationEntryPoint authenticationEntryPoint;
@Autowired
private RedisConnectionFactory redisConnectionFactory;
@Override
public void configure(ResourceServerSecurityConfigurer resources) throws Exception {
resources.authenticationEntryPoint(authenticationEntryPoint)
.tokenStore(redisTokenStore())
.accessDeniedHandler(customAccessDeniedHandler);
resources.resourceId(resourceId).stateless(true);
}
@Override
public void configure(HttpSecurity http) throws Exception {
// 开发环境,否则开启权限拦截,接口将无法访问
http
.authorizeRequests()
.antMatchers("/anon/**", "/diboot/**","/swagger**/**","/webjars/**","/v3/**","/doc.html").permitAll()
.and().headers().frameOptions().disable();
}
/**
* redis token 配置
*/
@Bean
public TokenStore redisTokenStore() {
return new RedisTokenStore(redisConnectionFactory);
}
}SpringWebConfig.class
"cn.com.lightcode.cloud.demo"包路径一致则不需要更改
package cn.com.lightcode.cloud.demo.config;
import com.diboot.cloud.config.BaseSpringWebConfig;
import com.diboot.core.util.DateConverter;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
import org.springframework.format.FormatterRegistry;
import org.springframework.http.converter.HttpMessageConverter;
import org.springframework.http.converter.json.MappingJackson2HttpMessageConverter;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
import java.util.List;
/**
* SpringWeb配置
* @author luoy
* @version 1.0
*/
@Configuration
@ComponentScan({"com.diboot", "cn.com.lightcode.cloud.demo"})
@MapperScan(basePackages={"cn.com.lightcode.cloud.demo.mapper"})
public class SpringWebConfig extends BaseSpringWebConfig implements WebMvcConfigurer {
@Autowired
private MappingJackson2HttpMessageConverter jacksonMessageConverter;
/**
* 覆盖Jackson转换
**/
@Override
public void extendMessageConverters(List<HttpMessageConverter<?>> converters) {
converters.add(0, jacksonMessageConverter);
}
/**
* 默认支持String-Date类型转换
*
* @param registry
*/
@Override
public void addFormatters(FormatterRegistry registry) {
registry.addConverter(new DateConverter());
}
}7. 启动项目
以 Spring Boot 项目在IntelliJ IDEA中的一种启动方式为例:
在项目入口文件 Application 上点击右键,在弹出的菜单上点击 RUN 'Application' 。 当出现类似下面提示时,表示启动成功:
在控制台(Console)上的启动日志最后,找到如下入口,表示服务配置完成,并可通过访问地址,打开管理页面:
: Devtools v2.x 初始化完成
: ...
: URL: http://localhost:8080/diboot/index.html
: ...8. 查看服务
访问nacos服务,查看服务列表,能看到demo已加入到服务列表,则表示该服务已加入微服务。
