Yaml 字符串比较和合并 - Java 8 代码示例
您可以使用SnakeYAML库来解析和比较这两个YAML字符串。以下是使用Java 8代码实现的示例:
import org.yaml.snakeyaml.Yaml;
import java.util.LinkedHashMap;
import java.util.Map;
public class Main {
public static void main(String[] args) {
String yaml1 = "deploy:\n" +
" url: 123456@.qq.com\n" +
" name: 123456\n" +
"swagger:\n" +
" enabled: ${swaggerEnabled:false}";
String yaml2 = "server:\n" +
" port: 50012\n" +
" tomcat:\n" +
" uri-encoding: UTF-8\n" +
" servlet:\n" +
" context-path: /api/ts-dc\n" +
"spring:\n" +
" profiles:\n" +
" active:\n" +
" - ${profileName:prod}\n" +
" servlet:\n" +
" multipart:\n" +
" max-file-size: 100MB\n" +
" max-request-size: 100MB\n" +
" ######################################mysql基础数据库-需要修改链接 start################################################\n" +
" datasource:\n" +
" type: com.alibaba.druid.pool.DruidDataSource\n" +
" driver-class-name: com.mysql.jdbc.Driver\n" +
" url: jdbc:mysql://${mysqlIp:172.17.0.1}:${mysqlPort:3306}/ly_dc?characterEncoding=UTF-8&useSSL=false&serverTimezone=Asia/Shanghai\n" +
" username: ${mysqlUsername:root}\n" +
" password: ${mysqlPassword:Ly37621040}\n" +
" druid:\n" +
" initial-size: 5\n" +
" min-idle: 5\n" +
" max-active: 20\n" +
" max-wait: 60000\n" +
" pool-prepared-statements: false\n" +
" max-pool-prepared-statement-per-connection-size: 20\n" +
" max-open-prepared-statements: 20\n" +
" validation-query: SELECT 'x' from dual\n" +
" validation-query-timeout: 30000\n" +
" test-on-borrow: true\n" +
" test-on-return: false\n" +
" test-while-idle: true\n" +
" time-between-eviction-runs-millis: 60000\n" +
" min-evictable-idle-time-millis: 300000\n" +
" max-evictable-idle-time-millis: 300000\n" +
" filters: stat,wall,log4j\n" +
" filter:\n" +
" wall:\n" +
" enabled: true\n" +
" config:\n" +
" comment-allow: true\n" +
" multi-statement-allow: true\n" +
" web-stat-filter:\n" +
" enabled: true #是否启用StatFilter默认值true\n" +
" url-pattern: /druid/*\n" +
" # exclusions: *.js,*.gif,*.jpg,*.bmp,*.png,*.css,*.ico,/druid/*\n" +
" session-stat-enable: true\n" +
" session-stat-max-count: 10\n" +
" principal-session-name:\n" +
" principal-cookie-name:\n" +
" profile-enable: true\n" +
" stat-view-servlet:\n" +
" enabled: true #是否启用StatViewServlet默认值true\n" +
" url-pattern: /druid/*\n" +
" reset-enable: true\n" +
" login-username: admin\n" +
" login-password: Ly37621040\n" +
" allow:\n" +
" deny:\n" +
" ######################################mysql基础数据库-需要修改链接 end################################################\n" +
" ##########################################redis-需要修改链接 start ##############################################\n" +
" redis:\n" +
" database: 1 # Redis数据库索引(默认为0)\n" +
" host: ${redisIp:172.17.0.1} # Redis服务器地址\n" +
" port: 16377 # Redis服务器连接端口\n" +
" password: 37621040 #Redis服务器连接密码(默认为空)\n" +
" timeout: 0 # 连接超时时间(毫秒)\n" +
" jedis:\n" +
" pool:\n" +
" max-idle: 8 # 连接池中的最大空闲连接\n" +
" min-idle: 1 # 连接池中的最小空闲连接\n" +
" max-active: 8 # 连接池最大连接数(使用负值表示没有限制)\n" +
" max-wait: -1 # 连接池最大阻塞等待时间(使用负值表示没有限制)\n" +
" ##########################################redis-需要修改链接 end ##############################################\n" +
" ##########################################rabbitmq-需要修改链接 start ##############################################\n" +
" rabbitmq:\n" +
" host: ${rabbitmqIp:172.17.0.1}\n" +
" port: 5672\n" +
" username: admin\n" +
" password: 37621040\n" +
" ##########################################rabbitmq-需要修改链接 end ##############################################\n" +
" flyway:\n" +
" enabled: true\n" +
" baseline-on-migrate: true\n" +
" clean-on-validation-error: true\n" +
" validate-on-migrate: false\n" +
" #目标版本\n" +
" #target:\n" +
" encoding: UTF-8\n" +
" # 迁移sql脚本文件存放路径,默认db/migration\n" +
" locations: classpath:db/migration\n" +
" # 迁移sql脚本文件名称的前缀,默认V\n" +
" sql-migration-prefix: V\n" +
" # 迁移sql脚本文件名称的分隔符,默认2个下划线__\n" +
" sql-migration-separator: __\n" +
" # 迁移sql脚本文件名称的后缀\n" +
" sql-migration-suffixes: .sql\n" +
" ##########################################quartz-需要修改链接(与基础库一样) start ##############################################\n" +
" quartz:\n" +
" properties:\n" +
" org:\n" +
" quartz:\n" +
" #quartz数据库连接(与基础库一样)\n" +
" dataSource:\n" +
" qzDS:\n" +
" URL: ${spring.datasource.url}\n" +
" driver: ${spring.datasource.driver-class-name}\n" +
" maxConnections: 10\n" +
" password: ${spring.datasource.password}\n" +
" user: ${spring.datasource.username}\n" +
" #quartzjob存储方式\n" +
" jobStore:\n" +
" #jdbc持久化\n" +
" class: org.quartz.impl.jdbcjobstore.JobStoreTX\n" +
" #数据源连接名\n" +
" dataSource: qzDS\n" +
" #驱动代表\n" +
" driverDelegateClass: org.quartz.impl.jdbcjobstore.StdJDBCDelegate\n" +
" #触发器忍耐时间 超过5s则错过\n" +
" misfireThreshold: 5000\n" +
" #表前缀\n" +
" tablePrefix: LY_QRTZ_\n" +
" useProperties: false\n" +
" scheduler:\n" +
" instanceName: ly_ts_scheduler\n" +
" threadPool:\n" +
" class: org.quartz.simpl.SimpleThreadPool\n" +
" makeThreadsDaemons: true\n" +
" threadCount: 10\n" +
" threadPriority: 5\n" +
" threadsInheritContextClassLoaderOfInitializingThread: true
" +
"##########################################quartz-需要修改链接(与基础库一样) end ##############################################
" +
"##########################################liboffice-需要修改链接start ##############################################
" +
"openoffice:\n" +
" host: ${libofficeIp:172.17.0.1}\n" +
" port: 8100\n" +
"##########################################openoffice-需要修改链接end ##############################################
" +
"##########################################elasticsearch-需要修改链接start ##############################################
" +
"elasticsearch:\n" +
" host: ${elasticsearchIp:172.17.0.1}\n" +
" port: 9200\n" +
" username: elastic\n" +
" password: changeme\n" +
"##########################################elasticsearch-需要修改链接start ##############################################
" +
"#挂载文件路径\n" +
"fileClientPath: data/dc\n" +
"mybatis-plus:\n" +
" mapper-locations: classpath:/mapper/**/*Mapper.xml\n" +
" typeAliasesPackage: com.ly.cloud.**.po\n" +
" global-config:\n" +
" #驼峰下划线转换\n" +
" db-config:\n" +
" id-type: ID_WORKER\n" +
" banner: false\n" +
" configuration:\n" +
" map-underscore-to-camel-case: true\n" +
" cache-enabled: false\n" +
" log-impl: org.apache.ibatis.logging.stdout.StdOutImpl\n" +
"feign:\n" +
" hystrix:\n" +
" enabled: true\n" +
"#队列名称\n" +
"queueName: queue_1\n" +
"#邮件发送参数\n" +
"mail:\n" +
" smtp:\n" +
" host: smtp.qq.com\n" +
" port: 465\n" +
" auth: true\n" +
" ssl:\n" +
" enable: true\n" +
" debug: true\n" +
" transport:\n" +
" protocol: smtp\n" +
" #邮件发送者账号(如需更改请打开注释)\n" +
" #formMailUser: xxx@ly-sky.com\n" +
" #smtp客户端密码\n" +
" #smtpPassword: xxx\n" +
" #邮件发送者密码\n" +
" #formMailPassword: xxx\n" +
"auth:\n" +
" captchaOnOff: false\n" +
" token:\n" +
" # 令牌自定义标识\n" +
" header: Authorization\n" +
" # 令牌密钥\n" +
" secret: abcdefghijklmnopqrstuvwxyz\n" +
" # 令牌有效期(默认30分钟)\n" +
" expireTime: ${expireTime:120}\n" +
"swagger:\n" +
" # 是否开启swagger\n" +
" enabled: ${swaggerEnabled:false}\n" +
"#联奕运维机器人\n" +
"ding:\n" +
" #开发者后台->应用开发-企业内部应用->选择您的机器人->应用凭证->AppKey\n" +
" app-key: dingpmhdlmis9n1eudpq\n" +
" #开发者后台->应用开发-企业内部应用->选择您的机器人->应用凭证->AppSecret\n" +
" app-secret: W3N8pOHvwcdC6NBtKUs00dQEJFumaijLFDBysiAQoEJ76d7VCz_XGWZvxIEWSp9p\n" +
" #群聊->机器人头像->机器人设置(有权限,不一定都能看到)->Webhook\n" +
" webhook: https://oapi.dingtalk.com/robot/send?access_token=5e5b46416e86a36c3c82ec21ead12df820273316f332aa366928044d29d23ed4";
Yaml yaml = new Yaml();
Map<String, Object> map1 = yaml.load(yaml1);
Map<String, Object> map2 = yaml.load(yaml2);
// 遍历 map1,将每个键值对添加到 map2 中,如果 map2 中已经存在该键,则覆盖
map1.forEach((key, value) -> map2.put(key, value));
// 将 map2 转换成 YAML 字符串
String mergedYaml = yaml.dump(map2);
System.out.println(mergedYaml);
}
}
注意:
- 确保您已经将 SnakeYAML 库添加到您的项目中。
- 以上代码示例中,
yaml1和yaml2是两个 YAML 字符串,您可以根据实际情况进行修改。 - 代码中使用
LinkedHashMap来保留键值对的顺序。 - 最后,您可以使用
yaml.dump(map2)将合并后的map2转换为 YAML 字符串并打印输出。
希望以上信息对您有所帮助。
原文地址: http://www.cveoy.top/t/topic/qeIw 著作权归作者所有。请勿转载和采集!