基于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-assembly-plugin版本:3.7.0

打包生成一个jar文件
直接IDE中maven面板中的package打包

[INFO] Building jar: D:\cwgis_nacos\galaxy-ai\target\galaxy-ai-1.0.jar
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time:  21.754 s
[INFO] Finished at: 2025-05-20T20:41:02+08:00
[INFO] ------------------------------------------------------------------------

指定jdk17版本运行jar包方法
title galaxy-ai-1.0
#export PATH=E:\apps\nacos\jdk17\bin:$PATH
E:\apps\nacos\jdk17\bin\java -jar galaxy-ai-1.0.jar

title galaxy-ai-1.0
#export PATH=E:\apps\nacos\jdk17\bin:$PATH
E:\apps\nacos\jdk17\bin\java -jar galaxy-ai-1.0.jar 

附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 172022.x 分支对应的是 Spring Cloud 2022 与 Spring Boot 3.0.x,最低支持 JDK 172021.x 分支对应的是 Spring Cloud 2021 与 Spring Boot 2.6.x,最低支持 JDK 1.82020.0 分支对应的是 Spring Cloud 2020 与 Spring Boot 2.4.x,最低支持 JDK 1.82.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.81.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.scsup</groupId>
  <artifactId>galaxy-ai</artifactId>
  <version>1.0</version>
  <packaging>jar</packaging>

  <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>
    <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>
    <plugins>
	    <plugin>
	      <groupId>org.springframework.boot</groupId>
	      <artifactId>spring-boot-maven-plugin</artifactId>
	    </plugin>
    </plugins>
  </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-ai
  config:
    import: nacos:192.168.30.33:8848
  #profiles:
  #  active:dev
  ai:
    dashscope:
      api-key: sk-111111111111111111111111111111
  cloud:
    nacos:
      config:
        server-addr: 192.168.30.33:8848
        #namespace: 'cwgis'
        group: 'ai'
        username: 'nacos'
        password: 'nacos'
        file-extension: yaml
        enable: true
        refresh-enabled: true
      discovery:
        # Nacos服务器地址
        server-addr: 192.168.30.33:8848
        #namespace: 'cwgis'
        group: 'ai'
  management:
    endpoint:
      health:
        show-details: always
    endpoints:
      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-id
    private 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() {
                @Override
                public Executor getExecutor() {
                    return null;
                }

                @Override
                public 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;
    }
}

http://192.168.30.33:8848/nacos

本blog地址:https://blog.csdn.net/hsg77

Logo

一站式 AI 云服务平台

更多推荐