基于nacos2.5.1的java微服务项目开发环境配置简介
基于nacos2.5.1的java微服务项目开发环境配置简介
一、引用组件包版本关系:
JDK 17
spring-boot: 3.2.3
spring-cloud: 2023.0.3
spring-cloud-alibaba:2023.0.3.2
nacos服务配置中心版本:2.5.1 (最新3.0版本)
maven 版本:3.6.3 (最新3.9.9版本)
maven-compiler-plugin版本:3.11.0
附maven版本下载地址:
https://archive.apache.org/dist/maven/maven-3/
附Spring-Cloud-Alibaba版本关系地址:
https://gitee.com/mirrors/Spring-Cloud-Alibaba
兼容性分析
//兼容性分析
maven-compiler-plugin 3.11.0 支持 JDK 8 到 JDK 21。
maven-compiler-plugin 3.11.0 版本至少需要 Maven 3.6.1 或更高版本。
这是因为 Maven 3.6.1 引入了 release 参数
//如何构建
2023.x 分支对应的是 Spring Cloud 2023 与 Spring Boot 3.2.x,最低支持 JDK 17。
2022.x 分支对应的是 Spring Cloud 2022 与 Spring Boot 3.0.x,最低支持 JDK 17。
2021.x 分支对应的是 Spring Cloud 2021 与 Spring Boot 2.6.x,最低支持 JDK 1.8。
2020.0 分支对应的是 Spring Cloud 2020 与 Spring Boot 2.4.x,最低支持 JDK 1.8。
2.2.x 分支对应的是 Spring Cloud Hoxton 与 Spring Boot 2.2.x,最低支持 JDK 1.8。
greenwich 分支对应的是 Spring Cloud Greenwich 与 Spring Boot 2.1.x,最低支持 JDK 1.8。
finchley 分支对应的是 Spring Cloud Finchley 与 Spring Boot 2.0.x,最低支持 JDK 1.8。
1.x 分支对应的是 Spring Cloud Edgware 与 Spring Boot 1.x,最低支持 JDK 1.7。
运行后效果:
二、创建java工程
maven/quickstart工程模板
org.apache.maven.archetypes:maven-archetype-quickstart
Project SDK ms-17 version 17.0.14
pom.xml引用组件配置情况:
<?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 http://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><groupId>com.cwgis</groupId><artifactId>galaxy-ai</artifactId><version>1.0</version><name>galaxy-ai</name><description>Building AI applications with Spring Boot</description><!-- FIXME change it to the project's website --><url>http://www.scsup.com</url><properties><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding><project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding><java.version>17</java.version><maven.compiler.source>17</maven.compiler.source><maven.compiler.target>17</maven.compiler.target><spring-boot.version>3.2.3</spring-boot.version><commons.io.version>2.13.0</commons.io.version><commons.text.version>1.6</commons.text.version><commons.lang3.version>3.12.0</commons.lang3.version><commons.fileupload.version>1.3.3</commons.fileupload.version><!-- Spring AI --><spring-ai.version>1.0.0-M3</spring-ai.version><spring-ai-alibaba.version>1.0.0-M3.1</spring-ai-alibaba.version><dashscope-sdk-java.version>2.15.1</dashscope-sdk-java.version><dl4j.version>1.0.0-M2.1</dl4j.version><!-- plugin versions --><maven-compiler-plugin.version>3.11.0</maven-compiler-plugin.version><maven-surefire-plugin.version>3.1.2</maven-surefire-plugin.version><maven-failsafe-plugin.version>3.1.2</maven-failsafe-plugin.version><maven-javadoc-plugin.version>3.5.0</maven-javadoc-plugin.version><maven-source-plugin.version>3.3.0</maven-source-plugin.version><jacoco-maven-plugin.version>0.8.10</jacoco-maven-plugin.version><flatten-maven-plugin.version>1.5.0</flatten-maven-plugin.version><maven-deploy-plugin.version>3.1.1</maven-deploy-plugin.version><asciidoctor-maven-plugin.version>2.2.3</asciidoctor-maven-plugin.version><maven-assembly-plugin.version>3.7.0</maven-assembly-plugin.version><maven-dependency-plugin.version>3.5.0</maven-dependency-plugin.version><maven-site-plugin.version>4.0.0-M13</maven-site-plugin.version><maven-project-info-reports-plugin.version>3.4.5</maven-project-info-reports-plugin.version><maven-jar-plugin.version>3.3.0</maven-jar-plugin.version><spring-javaformat-maven-plugin.version>0.0.39</spring-javaformat-maven-plugin.version><maven-gpg-plugin.version>3.0.1</maven-gpg-plugin.version><spring-cloud.version>2023.0.3</spring-cloud.version><spring-cloud-alibaba.version>2023.0.3.2</spring-cloud-alibaba.version></properties><!-- Spring Cloud 版本管理 --><parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>3.2.3</version> <!-- 使用合适的Spring Boot版本 --><relativePath/> <!-- lookup parent from repository --></parent><dependencies><dependency><groupId>org.junit.jupiter</groupId><artifactId>junit-jupiter-api</artifactId><scope>test</scope></dependency><!-- Optionally: parameterized tests support --><dependency><groupId>org.junit.jupiter</groupId><artifactId>junit-jupiter-params</artifactId><scope>test</scope></dependency><dependency><groupId>org.apache.commons</groupId><artifactId>commons-lang3</artifactId><version>3.12.0</version> <!-- 检查是否有新版本并相应更新 --></dependency><dependency><groupId>com.alibaba.cloud.ai</groupId><artifactId>spring-ai-alibaba-starter</artifactId><version>${spring-ai-alibaba.version}</version></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><!-- MCP jar --><!-- Spring Boot Starter for Web --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId></dependency><!-- Nacos Discovery --><dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId></dependency><!-- Nacos Client -->
<!-- <dependency>-->
<!-- <groupId>com.alibaba.nacos</groupId>-->
<!-- <artifactId>nacos-client</artifactId>-->
<!-- <version>2.4.2</version>-->
<!-- </dependency>-->
<!-- <dependency>-->
<!-- <groupId>com.alibaba.nacos</groupId>-->
<!-- <artifactId>nacos-api</artifactId>-->
<!-- <version>2.4.2</version>-->
<!-- </dependency>-->
<!-- <dependency>-->
<!-- <groupId>com.alibaba.nacos</groupId>-->
<!-- <artifactId>nacos-common</artifactId>-->
<!-- <version>2.4.2</version>-->
<!-- </dependency>--><!-- Sentinel for MCP --><dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-sentinel</artifactId></dependency></dependencies><dependencyManagement><dependencies><dependency><groupId>org.junit</groupId><artifactId>junit-bom</artifactId><version>5.11.0</version><type>pom</type><scope>import</scope></dependency><!--常用工具类 --><dependency><groupId>commons-io</groupId><artifactId>commons-io</artifactId><version>${commons.io.version}</version></dependency><dependency><groupId>org.apache.commons</groupId><artifactId>commons-text</artifactId><version>${commons.text.version}</version></dependency><dependency><groupId>org.apache.commons</groupId><artifactId>common-lang3</artifactId><version>${commons.lang3.version}</version></dependency><dependency><groupId>cn.hutool</groupId><artifactId>hutool-all</artifactId><version>${hutool.version}</version></dependency><!--add alibaba java lib --><dependency><groupId>com.alibaba</groupId><artifactId>dashscope-sdk-java</artifactId><version>${dashscope-sdk-java.version}</version><exclusions><exclusion><groupId>org.slf4j</groupId><artifactId>slf4j-api</artifactId></exclusion><exclusion><groupId>org.slf4j</groupId><artifactId>slf4j-simple</artifactId></exclusion></exclusions></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-dependencies</artifactId><version>${spring-boot.version}</version><type>pom</type><scope>import</scope></dependency><dependency><groupId>org.springframework.ai</groupId><artifactId>spring-ai-bom</artifactId><version>${spring-ai.version}</version><type>pom</type><scope>import</scope></dependency><!--AI Deeplearning4j Dependencies --><dependency><groupId>org.deeplearning4j</groupId><artifactId>deeplearning4j-core</artifactId><version>1.0.0-M2.1</version></dependency><dependency><groupId>org.deeplearning4j</groupId><artifactId>deeplearning4j-nn</artifactId><version>${dl4j.version}</version></dependency><dependency><groupId>org.nd4j</groupId><artifactId>nd4j-native-platform</artifactId><version>${dl4j.version}</version></dependency><!-- DataVec (for CSV reading) --><dependency><groupId>org.datavec</groupId><artifactId>datavec-api</artifactId><version>${dl4j.version}</version></dependency><dependency><groupId>org.datavec</groupId><artifactId>datavec-local</artifactId><version>${dl4j.version}</version></dependency><dependency><groupId>org.springframework.ai</groupId><artifactId>spring-ai-openai-spring-boot-starter</artifactId></dependency><!-- SpringCloud 微服务 --><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-dependencies</artifactId><version>${spring-cloud.version}</version><type>pom</type><scope>import</scope></dependency><!-- SpringCloud Alibaba 微服务 --><dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-alibaba-dependencies</artifactId><version>${spring-cloud-alibaba.version}</version><type>pom</type><scope>import</scope></dependency><!-- SpringBoot 依赖配置 --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-dependencies</artifactId><version>${spring-boot.version}</version><type>pom</type><scope>import</scope></dependency></dependencies></dependencyManagement><build><pluginManagement><!-- lock down plugins versions to avoid using Maven defaults (may be moved to parent pom) --><plugins><!-- Spring Boot Maven Plugin --><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId><executions><execution><goals><!-- 打包成一个jar文件--><goal>repackage</goal></goals></execution></executions></plugin><plugin><groupId>io.spring.javaformat</groupId><artifactId>spring-javaformat-maven-plugin</artifactId><version>${spring-javaformat-maven-plugin.version}</version><executions><execution><phase>validate</phase><inherited>true</inherited><goals><goal>validate</goal></goals></execution></executions></plugin>
<!-- <plugin>-->
<!-- <groupId>org.apache.maven.plugins</groupId>-->
<!-- <artifactId>maven-site-plugin</artifactId>-->
<!-- <version>${maven-site-plugin.version}</version>-->
<!-- </plugin>--><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-compiler-plugin</artifactId><version>${maven-compiler-plugin.version}</version>
<!-- <configuration>-->
<!-- <source>${java.version}</source>-->
<!-- <target>${java.version}</target>-->
<!-- <!– 或者使用 release 选项(需要JDK 9+) –>-->
<!-- <!– <release>${java.version}</release> –>-->
<!-- </configuration>--></plugin>
<!-- <plugin>-->
<!-- <groupId>org.apache.maven.plugins</groupId>-->
<!-- <artifactId>maven-surefire-plugin</artifactId>-->
<!-- <version>${maven-surefire-plugin.version}</version>-->
<!-- <!–-->
<!-- <configuration>-->
<!-- <argLine>${surefireArgLine}</argLine>-->
<!-- </configuration> –>-->
<!-- </plugin>--><!-- <plugin>-->
<!-- <groupId>org.apache.maven.plugins</groupId>-->
<!-- <artifactId>maven-jar-plugin</artifactId>-->
<!-- <version>${maven-jar-plugin.version}</version>-->
<!-- <configuration>-->
<!-- <archive>-->
<!-- <manifestEntries>-->
<!-- <Implementation-Title>${project.artifactId}</Implementation-Title>-->
<!-- <Implementation-Version>${project.version}</Implementation-Version>-->
<!-- </manifestEntries>-->
<!-- </archive>-->
<!-- </configuration>-->
<!-- </plugin>--><!-- <plugin>-->
<!-- <groupId>org.codehaus.mojo</groupId>-->
<!-- <artifactId>flatten-maven-plugin</artifactId>-->
<!-- <version>${flatten-maven-plugin.version}</version>-->
<!-- <executions>-->
<!-- <execution>-->
<!-- <id>flatten</id>-->
<!-- <phase>process-resources</phase>-->
<!-- <goals>-->
<!-- <goal>flatten</goal>-->
<!-- </goals>-->
<!-- <configuration>-->
<!-- <updatePomFile>true</updatePomFile>-->
<!-- <flattenMode>ossrh</flattenMode>-->
<!-- <pomElements>-->
<!-- <distributionManagement>remove</distributionManagement>-->
<!-- <dependencyManagement>remove</dependencyManagement>-->
<!-- <repositories>remove</repositories>-->
<!-- <scm>keep</scm>-->
<!-- <url>keep</url>-->
<!-- <organization>resolve</organization>-->
<!-- </pomElements>-->
<!-- </configuration>-->
<!-- </execution>-->
<!-- <execution>-->
<!-- <id>clean</id>-->
<!-- <phase>clean</phase>-->
<!-- <goals>-->
<!-- <goal>clean</goal>-->
<!-- </goals>-->
<!-- </execution>-->
<!-- </executions>-->
<!-- </plugin>-->
<!-- <plugin>-->
<!-- <groupId>org.apache.maven.plugins</groupId>-->
<!-- <artifactId>maven-deploy-plugin</artifactId>-->
<!-- <version>${maven-deploy-plugin.version}</version>-->
<!-- </plugin>--></plugins></pluginManagement><resources><resource><directory>src/main/resources</directory><filtering>true</filtering></resource></resources></build><repositories><repository><id>spring-milestones</id><name>Spring Milestones</name><url>https://repo.spring.io/milestone</url><snapshots><enabled>false</enabled></snapshots></repository><repository><id>sonatype-nexus-staging</id><name>Nexus Release Repository</name><url>https://oss.sonatype.org/service/local/staging/deploy/maven2/</url></repository><repository><id>aliyun-central</id><name>aliyun-central</name><url>https://maven.aliyun.com/repository/central</url></repository><repository><id>aliyun-public</id><name>aliyun-public</name><url>https://maven.aliyun.com/repository/public</url></repository><repository><id>aliyun-snapshots</id><name>aliyun-snapshots</name><url>https://maven.aliyun.com/repository/apache-snapshots</url></repository><repository><id>aliyun-plugin</id><name>aliyun-plugin</name><url>https://maven.aliyun.com/repository/gradle-plugin</url></repository><repository><id>osgeo</id><name>OSGeo Release Repository</name><url>https://repo.osgeo.org/repository/release/</url></repository></repositories>
</project>
src/main/resources/application.yml配置情况:
#基本配置
server.port: 9999
server.tomcat.max-http-form-post-size: 5120MB
#server.ssl.key-store-type: PKCS12
#server.ssl.key-store: classpath:keystore.p12
#server.ssl.key-store-password: your_password
#yame配置模式
spring:application:name: galaxy-aiconfig:import: nacos:192.168.30.33:8848#profiles:# active:devai:dashscope:api-key: sk-111111111111111111111111111111cloud:nacos:config:server-addr: 192.168.30.33:8848#namespace: 'cwigs'group: 'ai'username: 'nacos'password: 'nacos'file-extension: yamlenable: truerefresh-enabled: truediscovery:# Nacos服务器地址server-addr: 192.168.30.33:8848#namespace: 'cwigs'group: 'ai'management:endpoint:health:show-details: alwaysendpoints:web:exposure:include: '*'logging:level:com.alibaba.cloud.nacos.configdata: debug
nacos配置类 src/main/java/com.cwgis/config/NacosConfigManager.java
package com.cwgis.config;import com.alibaba.nacos.api.NacosFactory;
import com.alibaba.nacos.api.config.ConfigService;
import com.alibaba.nacos.api.config.listener.Listener;
import com.alibaba.nacos.api.exception.NacosException;import java.util.Properties;
import java.util.concurrent.Executor;public class NacosConfigManager {private static final String SERVER_ADDR = "192.168.30.33:8848"; // Nacos服务器地址private static final String DATA_ID = "cwgis"; // 配置ID your-data-idprivate static final String GROUP = "ai"; // 配置分组private static final Integer CONNECTION_POOL_SIZE=50;private ConfigService configService;public NacosConfigManager() {try {Properties properties = new Properties();properties.put("serverAddr", SERVER_ADDR);//properties.put("namespace", DATA_ID);//properties.put("group", GROUP);//添加附加配置参数//properties.put("encode", "UTF-8");//properties.put("DASHSCOPE_CONNECTION_POOL_SIZE", CONNECTION_POOL_SIZE);//properties.put("DASHSCOPE_CONNECTION_TIMEOUT",5000);//properties.put("DASHSCOPE_MAXIMUM_ASYNC_REQUESTS",100);//properties.put("DASHSCOPE_MAXIMUM_ASYNC_REQUESTS_PER_HOST",100);//properties.put("DASHSCOPE_READ_TIMEOUT",30000);//properties.put("DASHSCOPE_WRITE_TIMEOUT",30000);//properties.put("DASHSCOPE_CONNECTION_IDLE_TIME",500000);//configService = NacosFactory.createConfigService(properties);} catch (NacosException e) {e.printStackTrace();}}// 获取配置public String getConfig() {try {return configService.getConfig(DATA_ID, GROUP, 5000); //5000 是超时ms} catch (NacosException e) {e.printStackTrace();return null;}}// 添加配置监听器public void addListener() {try {configService.addListener(DATA_ID, GROUP, new Listener() {@Overridepublic Executor getExecutor() {return null;}@Overridepublic void receiveConfigInfo(String configInfo) {System.out.println("配置更新: " + configInfo);// 处理配置更新事件}});} catch (NacosException e) {e.printStackTrace();}}// 发布配置public boolean publishConfig(String content) {try {return configService.publishConfig(DATA_ID, GROUP, content);} catch (NacosException e) {e.printStackTrace();return false;}}
}
demo Rest控制器类DemoController.java
package com.cwgis;import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;@RestController
public class DemoController {@GetMapping("/hello")public String sayHello() {return "Hello, Nacos and Sentinel!";}
}
三、编译运行Java微服务项目
入口类
aiApplication.java
package com.cwgis;//import com.cwgis.pg.dl4j.LoanApprovalModel;
import com.cwgis.config.NacosConfigManager;
import com.cwgis.pg.function.MockOrderService;
import com.cwgis.pg.function.Response;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Description;import java.util.function.Function;/*** Hello world!*/
@SpringBootApplication
@EnableDiscoveryClient // 启用服务发现功能
public class aiApplication {public static void main(String[] args) {try {// 初始化Nacos配置管理器NacosConfigManager configManager = new NacosConfigManager();// 获取初始配置String config = configManager.getConfig();System.out.println("初始配置: " + config);// 添加配置监听器configManager.addListener();SpringApplication.run(aiApplication.class, args);System.out.println("===============");System.out.println("ai服务正在运行中!");System.out.println("===============");////LoanApprovalModel t = new LoanApprovalModel();//t.test(null);}catch (Exception ex){System.out.println(ex);}}@Bean@Description("根据用户编号和订单编号查询订单信息")public Function<MockOrderService.Request, Response> getOrderFunction(MockOrderService mockOrderService) {return mockOrderService::getOrder;}
}
本blog地址:https://blog.csdn.net/hsg77