笔记:关于SpringBoot项目打jar包之yml配置文件之不同运行环境之jar包上传服务器

本文详细介绍了Java项目从编写完成到在本地和服务器环境运行的全流程。首先,配置了不同环境的yml文件,包括application.yml(基础配置)、application-dev.yml(开发环境)和application-server.yml(服务器环境)。接着,通过Maven进行打包,确保pom.xml配置正确。然后,使用scp命令将jar包上传至服务器,并通过java -jar指令指定活跃环境启动应用。此过程涉及到了版本控制、服务器配置和应用部署等关键步骤。

 场景流程:

1、项目编写完成后,需要运行在本地环境(开发环境)或者服务器环境(测试或生产环境)

2、本文作打包(默认jar包)发布到服务器上 ;

3、服务器环境与开发环境配置不同,基于方便打包及部署服务器;

4、流程如下:

 

1、项目编写完成yml文件需要作如下配置

 resources文件夹目录如图

 

 application.yml文件

server:
  port: 9000

spring:
  freemarker:
    check-template-location: false
  profiles:
    active: dev
  jackson:
    time-zone: GMT+8
  data:
    redis:
      repositories:
        enabled: false

 application-dev.yml开发环境yml文件

server:
  port: 开发环境端口

spring:
  datasource:
    driver-class-name: com.mysql.cj.jdbc.Driver
    url: jdbc:mysql://开发环境ip:开发环境端口/数据库名?useUnicode=true&characterEncoding=utf8
    username: 用户名
    password: 密码

 application-server.yml服务器环境yml文件

server:
  port: 服务器端口

spring:
  datasource:
    driver-class-name: com.mysql.cj.jdbc.Driver
    url: jdbc:mysql://服务器ip:服务器端口/数据库名?useUnicode=true&characterEncoding=utf8
    username: 用户名
    password: 密码

2、yml文件配置完成后将项目打包 

1、打包前提pom文件配置

<build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>3.8.1</version>
                <configuration>
                    <source>1.8</source>
                    <target>1.8</target>
                    <encoding>UTF-8</encoding>
                </configuration>
            </plugin>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
                <version>2.3.12.RELEASE</version>
                <executions>
                    <execution>
                        <goals>
                            <goal>repackage</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>
        </plugins>
    </build>

2、 打包流程如图

 

3、jar包上传服务器 

cmd或者Terminal终端输入

scp /jar包路径/jar包名  服务器用户名@服务器ip:/存放jar包的路径/存放jar包的目录

4、运行jar包 

 运行jar包时,通过active指定相应场景的yml配置文件

java -jar jar_name --spring.profiles.active=server

或 (后台运行,关闭服务器终端窗口不会杀掉进程)

nohup java -jar jar_name --spring.profiles.active=server &

<think> 我们讨论的是在Maven项目中不使用Spring Boot方式读取YAML配置文件的方法。根据引用[2]和引用[3],虽然Spring Boot提供了便捷的配置读取方式(如@ConfigurationProperties和@Value),但我们现在需要的是纯Java方式。 ### 核心思路 1. **确保YAML文件位于类路径**:通过Maven资源配置将YAML文件放入`target/classes`目录 2. **使用YAML解析库**:推荐SnakeYAML(轻量级、易用) 3. **文件读取方式**:通过ClassLoader获取资源流 ### 具体步骤 #### 1. 添加SnakeYAML依赖(pom.xml) ```xml <dependency> <groupId>org.yaml</groupId> <artifactId>snakeyaml</artifactId> <version>2.2</version> <!-- 使用最新版本 --> </dependency> ``` #### 2. 配置文件位置 将YAML文件放在`src/main/resources`目录下(例如`config.yml`) #### 3. Maven资源配置(可选,默认已含resources) 如果使用默认位置则无需额外配置。若需自定义目录,参考: ```xml <build> <resources> <resource> <directory>src/main/my-configs</directory> <!-- 自定义目录 --> <includes> <include>*.yml</include> </includes> </resource> </resources> </build> ``` #### 4. Java读取代码 ```java import org.yaml.snakeyaml.Yaml; import java.io.InputStream; import java.util.Map; public class YamlReader { public static void main(String[] args) { // 通过类加载器获取资源流 InputStream inputStream = YamlReader.class .getClassLoader() .getResourceAsStream("config.yml"); // 创建YAML解析器 Yaml yaml = new Yaml(); // 解析为Map结构 Map<String, Object> config = yaml.load(inputStream); // 示例:获取嵌套属性 String serverPort = ((Map<String, String>) config.get("server")) .get("port").toString(); System.out.println("Server Port: " + serverPort); } } ``` #### 5. 复杂结构处理(推荐定义配置类) ```java public class AppConfig { private Server server; // 嵌套静态类 public static class Server { private String port; private String host; // getters & setters } // getters & setters } // 解析时直接映射到对象 AppConfig config = yaml.loadAs(inputStream, AppConfig.class); System.out.println(config.getServer().getPort()); ``` ### 关键注意事项 1. **路径问题**: - 根路径文件:`getResourceAsStream("filename.yml")` - 子目录文件:`getResourceAsStream("subdir/filename.yml")` 2. **资源关闭**:Java 9+推荐使用try-with-resources ```java try (InputStream is = ...) { Yaml yaml = new Yaml(); return yaml.load(is); } ``` 3. **热更新支持**:非Spring项目需自行实现 ```java // 结合WatchService监听文件变化 Path path = Paths.get(ClassLoader.getResource("config.yml").toURI()); WatchService watcher = FileSystems.getDefault().newWatchService(); path.getParent().register(watcher, ENTRY_MODIFY); ``` ### 调试技巧 - 检查文件是否在jar中: ```bash jar tf target/your-app.jar | grep config.yml ``` - 打印完整配置树: ```java yaml.dump(config, System.out); ``` > 提示:对于多环境配置,可创建`config-dev.yml`/`config-prod.yml`,运行时通过系统变量指定: > ```java > String env = System.getProperty("env", "dev"); > InputStream is = ...getResourceAsStream("config-"+env+".yml"); > ``` --- ### §§相关问题§§ 1. 如何解决SnakeYAML解析YAML文件时的依赖冲突? 2. 在Web应用中如何实现YAML配置的全局访问? 3. 不使用Spring Boot时,如何实现配置加密? </think> ### Maven项目不使用Spring Boot读取YAML配置文件的方法 在非Spring Boot的Maven项目中读取YAML配置文件,可通过以下步骤实现: #### 1. **添加SnakeYAML依赖(核心)** 在`pom.xml`中添加解析库: ```xml <dependency> <groupId>org.yaml</groupId> <artifactId>snakeyaml</artifactId> <version>2.2</version> <!-- 查看最新版本 --> </dependency> ``` #### 2. **配置文件位置** 将YAML文件放在标准资源目录: ``` src/main/resources/config.yml ``` 或自定义目录(需在pom中配置): ```xml <build> <resources> <resource> <directory>src/main/my-configs</directory> <includes> <include>*.yml</include> </includes> </resource> </resources> </build> ``` #### 3. **Java读取代码(三种方式)** ##### 方式1:基本读取(返回Map) ```java import org.yaml.snakeyaml.Yaml; import java.io.InputStream; public class ConfigLoader { public static Map<String, Object> load() { InputStream input = ConfigLoader.class .getClassLoader() .getResourceAsStream("config.yml"); Yaml yaml = new Yaml(); return yaml.load(input); // 返回嵌套Map结构 } } // 使用示例 Map<String, Object> config = ConfigLoader.load(); String value = ((Map)config.get("database")).get("url").toString(); ``` ##### 方式2:映射到Java对象(推荐) ```java public class AppConfig { private Database database; // 嵌套静态类 public static class Database { private String url; private String username; // getters & setters } // getters & setters } // 解析方法 AppConfig config = yaml.loadAs(input, AppConfig.class); System.out.println(config.getDatabase().getUrl()); ``` ##### 方式3:读取为Properties对象 ```java Yaml yaml = new Yaml(); Properties props = new Properties(); props.putAll(yaml.load(input)); // 转为平面结构 // 获取值(需完整路径) props.getProperty("database.url"); ``` #### 4. **多环境配置实现** ```java // 根据环境变量加载不同配置 String env = System.getProperty("env", "dev"); String fileName = "config-" + env + ".yml"; InputStream input = getClass().getClassLoader() .getResourceAsStream(fileName); ``` #### 5. **热更新配置(高级)** ```java Path configPath = Paths.get("src/main/resources/config.yml"); WatchService watcher = FileSystems.getDefault().newWatchService(); configPath.getParent().register(watcher, ENTRY_MODIFY); while (true) { WatchKey key = watcher.take(); for (WatchEvent<?> event : key.pollEvents()) { if (event.context().toString().equals("config.yml")) { reloadConfig(); // 重新加载配置 } } key.reset(); } ``` ### 关键注意事项 1. **文件路径问题**: - 根目录文件:`getResourceAsStream("config.yml")` - 子目录文件:`getResourceAsStream("subdir/config.yml")` - 外部文件(需绝对路径):`new FileInputStream("/opt/app/config.yml")` 2. **资源关闭**: ```java try (InputStream input = ...) { // Java 7+自动关闭 Yaml yaml = new Yaml(); return yaml.load(input); } ``` 3. **配置验证**: - 构建后检查:`target/classes`目录下是否存在YAML文件 - 运行时检查: ```java if (input == null) { throw new FileNotFoundException("YAML config not found"); } ``` > **调试建议**:在测试类中打印完整配置树 > ```java > System.out.println(new Yaml().dump(configMap)); > ``` ### 性能优化技巧 - **预加载配置**:初始化时加载配置到静态变量 - **缓存机制**:对频繁访问的配置项使用缓存 - **轻量级DI**:结合Google Guice实现配置注入[^4] --- ###
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值