精华内容
下载资源
问答
  • 12. SpringBoot读取yml(yaml)文件 12.1 了解什么是yml(yaml)文件 YML文件格式是YAML (YAML Aint Markup Language)编写的文件格式,YAML是一种直观的能够被电脑识别的的数据序列化格式,并且容易被人类阅读,容易和...

    12. SpringBoot读取yml(yaml)文件

    12.1 了解什么是yml(yaml)文件

    YML文件格式是YAML (YAML Aint Markup Language)编写的文件格式,YAML是一种直观的能够被电脑识别的的数据序列化格式,并且容易被人类阅读,容易和脚本语言交互的,可以被支持YAML库的不同的编程语言程序导入,比如: C/C++, Ruby, Python, Java, Perl, C#, PHP等。YML文件是以数据为核心的,比传统的xml方式更加简洁
    YML文件的扩展名可以是.yml或.yaml

    12.2 yml配置文件的语法

    1. 配置普通数据
      语法 key: value 注意,value之前一定要有个空格
    # 属性的配置
    name: acece
    
    1. 配置对象数据
      语法:
      key:
      ​ key1: value1
      ​ key2: value2
      或者
      key: {key1: value1,key2: value2}
    # 对象的配置
    person:
      name: acece
      age: 18
      addr: beijing
    
    # 行内对象配置
    person1: {name: acece,age: 18,addr: beijing}
    
    # 配置端口
    #改变application.properties
    server:
      port: 8890
      servlet:
        path: /demo1
    

    注意:key1前面的空格个数不限定,在yml语法中,相同缩进代表同一个级别
    3. 配置Map数据
    语法:
    map:
    key: value1
    key: value2

    # map结构
    map:
      key1: value1
      key2: value2
    
    1. 配置数组(List, Set)数据
      语法:
      key:
      ​ - value1
      ​ - value2
      或者
      key: [value1,value2]
    # 配置数据集合
    city:
      - beijing
      - tianjin
      - shanghai
      - chongqing
    
    # 或者行内注入
    city: [beijing,tianjin,shanghai,chongqing]
    
    # 集合中的元素是对象形式
    student:
      - name: zhangsan
        age: 18
        score: 100
      - name: lisi
        age: 28
        score: 88
      - name: wangwu
        age: 38
        score: 90
    
    # 或者使用行内注入
    student: [{name: zhangsan,age: 18,score: 100},{name: lisi,age: 28,score: 88},{name: wangwu,age: 38,score: 90}]
    

    注意:value与之间的 - 之间存在一个空格

    12.3 SpringBoot配置信息的查询

    文档URL: https://docs.spring.io/spring-boot/docs/2.0.1.RELEASE/reference/htmlsingle/#common-application-properties
    常用的配置摘抄如下:

    # QUARTZ SCHEDULER (QuartzProperties)
    spring.quartz.jdbc.initialize-schema=embedded # Database schema initialization mode.
    spring.quartz.jdbc.schema=classpath:org/quartz/impl/jdbcjobstore/tables_@@platform@@.sql # Path to the SQL file to use to initialize the database schema.
    spring.quartz.job-store-type=memory # Quartz job store type.
    spring.quartz.properties.*= # Additional Quartz Scheduler properties.
    ​
    # ----------------------------------------
    # WEB PROPERTIES
    # ----------------------------------------
    ​
    # EMBEDDED SERVER CONFIGURATION (ServerProperties)
    server.port=8080 # Server HTTP port.
    server.servlet.context-path= # Context path of the application.
    server.servlet.path=/ # Path of the main dispatcher servlet.
    ​
    # HTTP encoding (HttpEncodingProperties)
    spring.http.encoding.charset=UTF-8 # Charset of HTTP requests and responses. Added to the "Content-Type" header if not set explicitly.
    ​
    # JACKSON (JacksonProperties)
    spring.jackson.date-format= # Date format string or a fully-qualified date format class name. For instance, `yyyy-MM-dd HH:mm:ss`.
    ​
    # SPRING MVC (WebMvcProperties)
    spring.mvc.servlet.load-on-startup=-1 # Load on startup priority of the dispatcher servlet.
    spring.mvc.static-path-pattern=/** # Path pattern used for static resources.
    spring.mvc.view.prefix= # Spring MVC view prefix.
    spring.mvc.view.suffix= # Spring MVC view suffix.
    ​
    # DATASOURCE (DataSourceAutoConfiguration & DataSourceProperties)
    spring.datasource.driver-class-name= # Fully qualified name of the JDBC driver. Auto-detected based on the URL by default.
    spring.datasource.password= # Login password of the database.
    spring.datasource.url= # JDBC URL of the database.
    spring.datasource.username= # Login username of the database.
    ​
    # JEST (Elasticsearch HTTP client) (JestProperties)
    spring.elasticsearch.jest.password= # Login password.
    spring.elasticsearch.jest.proxy.host= # Proxy host the HTTP client should use.
    spring.elasticsearch.jest.proxy.port= # Proxy port the HTTP client should use.
    spring.elasticsearch.jest.read-timeout=3s # Read timeout.
    spring.elasticsearch.jest.username= # Login username.
    

    我们可以通过配置application.poperties 或者 application.yml 来修改SpringBoot的默认配置
    例如:
    application.properties文件

    server.port=8888
    server.servlet.context-path=/demo
    

    application.yml文件

    server:
      port: 8888
      servlet:
        path: /demo
    

    12.4 读取.yml配置文件

    12.4.1 读取普通数据 key: value

    1. resources包下创建application.yml配置文件
      在这里插入图片描述
    mail.host: acece.com2
    
    1. SpringBootReadThing.Test类中编写测试方法
      注入application.yml中的key, 使用@**${key}**注解注入
     @Value("${mail.host}")
        private String mailHost;
    
        @Test
        public void readYml(){
            System.out.println("&&&&&&&&&&&&&&&&&&&&&&&&&"+mailHost);
        }
    

    在这里插入图片描述
    控制台打印出来value值, 读取成功~

    12.4.2 读取对象数据

    1. 配置文件信息如下
    mail:
      host: acece.comNew
      port: port=80New
      username: username=啊策策New
      password: password=1234563New
    
    1. MailProperties.java
      不需要指定application.yml的位置.
    package com.acece.domain;
    
    import org.springframework.boot.context.properties.ConfigurationProperties;
    import org.springframework.context.annotation.Configuration;
    import org.springframework.context.annotation.PropertySource;
    import org.springframework.stereotype.Component;
    
    /**
     * @author 啊策策
     * @date 2019-08-06 19:09
     */
    @ConfigurationProperties(prefix = "mail") //配置文件的前缀
    //@PropertySource(value = "classpath:mail.properties") //写明自定义的配置文件路径
    @Configuration //包扫描,springBoot启动自动创建该mailproperties对象
    public class MailProperties {
    
        private String host;
        private String port;
        private String username;
        private String password;
    
        public String getHost() {
            return host;
        }
    
        public void setHost(String host) {
            this.host = host;
        }
    
        public String getPort() {
            return port;
        }
    
        public void setPort(String port) {
            this.port = port;
        }
    
        public String getUsername() {
            return username;
        }
    
        public void setUsername(String username) {
            this.username = username;
        }
    
        public String getPassword() {
            return password;
        }
    
        public void setPassword(String password) {
            this.password = password;
        }
    
        @Override
        public String toString() {
            return "MailProperties{" +
                    "host='" + host + '\'' +
                    ", port='" + port + '\'' +
                    ", username='" + username + '\'' +
                    ", password='" + password + '\'' +
                    '}';
        }
    }
    
    1. SpringBootReadThing.Test类中编写测试方法
      @Autowired
        private MailProperties mailProperties;
    
        @Test
        public void readYml2(){
            System.out.println(mailProperties);;
        }
    

    在这里插入图片描述

    展开全文
  • 不同环境的配置yml文件名不一样: appointment.yml appointment-dev.yml(开发环境) appointment-test.yml(测试环境) appointment-prod.yml(正式环境) yml示例 application.yml 示例: 注意:配置多环境yml 文件...

    多环境配置

    1. 配置yml文件:
    • appointment.yml
    • appointment-dev.yml(开发环境)
    • appointment-test.yml(测试环境)
    • appointment-prod.yml(正式环境)
      yml文件
    1. yml示例
      application.yml 示例:
      注意:配置多环境yml 文件必须是application开头文件
      spring:
      	profiles:
      	 	active: @spring.profiles.active@
      
      application-dev.yml 示例:
      server:
      	port: 8081
      
      application-test.yml 示例:
      server:
      	port: 8083
      
      application-prod.yml 示例:
      server:
      	port: 8082
      
      pom文件示例:
      默认激活dev测试环境
      <profiles>
      	<profile>
      		<id>dev</id>
      		<activation>
      			<!--默认激活-->
      			<activeByDefault>true</activeByDefault>
      		</activation>
      		<properties>
      			<spring.profiles.active>dev</spring.profiles.active>
      		</properties>
      	</profile>
      
      	<!--测试环境-->
      	<profile>
      		<id>test</id>
      		<properties>
      			<spring.profiles.active>test</spring.profiles.active>
      		</properties>
      	</profile>
      
      	<!--生产环境-->
      	<profile>
      		<id>prod</id>
      		<properties>
      			<spring.profiles.active>prod</spring.profiles.active>
      		</properties>
      	</profile>
      </profiles>
      
      修改好yml以及pom文件之后,运行 mvn package -P test ,-P 之后值为环境的ID,比如dev是开发环境,prod是正式环境(由于直接runSpringBoot项目主类是开发环境,所以本次采用打包方式),不同环境,只需更改-P环境变量的值即可。
      启动打包好的jar包
      直接运行 java -jar xxx.jar 即可:
      在这里插入图片描述
      可以看到,我们mvn package -P test,打包测试环境的yml配置文件,启动端口正是之前配置的8083,达到了我们实现多环境配置的效果。

    引用外部yml配置文件的两种方式

    1.第一种:
    创建application-common.yml 文件
    修改application.yml文件,如:

    spring:
      profiles:
        active: @spring.profiles.active@
        include: common
    

    include:common common 是application-后缀,此方式必须是application开头yml文件

    测试引用外部配置文件

    编辑 application-common.yml,如:

    common:
      test: 外部yml文件测试common
    

    编写一个class,Common类,然后使用@Value注入的方式来获取application-common.yml 内容

    @Component
    public class Common {
    
        @Value("${common.test}")
        private String test;
    
        public String getTest() {
            return test;
        }
    
        public void setTest(String test) {
            this.test = test;
        }
    }
    

    编写一个controller,TestController,如:

    @RestController()
    public class TestController {
    
        @Autowired
        Common common;
    
        @GetMapping("/test")
        public String test() {
    
            return common.getTest();
        }
    }
    

    启动项目,并且调用该请求127.0.0.1:8081/test,如:
    调用结果
    可见成功获取application-common.yml 文件中common.test key值内容
    2.第二种引用外部yml文件方式
    Spring Framework有两个类加载YAML文件,YamlPropertiesFactoryBean和YamlMapFactoryBean
    本次我们使用YamlPropertiesFactoryBean来引用
    首先编写一个yml文件,并且在配置文件中写入数据,如config.yml:
    在这里插入图片描述
    然后,在任意spring 容器启动可加载的地方,编写如下代码:

    SpringBootApplication
    public class DemoApplication {
    
    	@Bean
    	public static PropertySourcesPlaceholderConfigurer properties() {
    		PropertySourcesPlaceholderConfigurer configurer = new PropertySourcesPlaceholderConfigurer();
    		YamlPropertiesFactoryBean yaml = new YamlPropertiesFactoryBean();
    		yaml.setResources(new ClassPathResource("config.yml"));
    		configurer.setProperties(yaml.getObject());
    		return configurer;
    	}
    
    	public static void main(String[] args) {
    		SpringApplication.run(DemoApplication.class, args);
    	}
    }
    

    代码为@Bean 代码块,new ClassPathResource(“你的配置文件名即可”)
    接下来我们新建一个Class ,Config 类,如:

    public class Config {
        @Value("${config.test}")
        private String test;
    
        public String getTest() {
            return test;
        }
    
        public void setTest(String test) {
            this.test = test;
        }
    }
    

    新建一个请求,如:

    	@Autowired
        Config config;
    
        @GetMapping("/configTest")
        public String configTest() {
    
            return config.getTest();
        }
    

    接下来我们启动项目并且访问configTest,如:
    在这里插入图片描述
    成功访问!

    参考资料:
    1.https://www.jianshu.com/p/d258b26ef889
    2.https://yulaiz.com/spring-boot-maven-profiles/

    展开全文
  • 最近想在springboot中增加一个启动项,随着springboot的部署启动udp协议,然后我将对于udp的本地端口和服务器端的ip和端口等的配置放在yml,方便修改和配置。 当然,先把yml和取值的类写好。 以下是application.yml...

    最近想在springboot中增加一个启动项,随着springboot的部署启动udp协议,然后我将对于udp的本地端口和服务器端的ip和端口等的配置放在yml,方便修改和配置。
    当然,先把yml和取值的类写好。
    以下是application.yml文件中的配置:

    udp:
      mip: 127.0.0.1
      mport: 9999
      localport: 6125
    

    以下是获取值的类:

    @Component
    public class udpClientGetTime(){
    		@Value("${udp.mip}")
    			public String mip;
    }
    

    然后就是将他放到启动项中。
    1、new一个类。于是,我在启动项中new了一个我想要的类,然后失败了,获得的都是null,上网一搜索,发现new是行不通的。下面是错误示范。

    @SpringBootApplication
    @EnableScheduling
    @ComponentScan()
    public class DemoApplication extends SpringBootServletInitializer {
    	public static void main(String[] args) {
    		SpringApplication.run(DemoApplication.class, args);
    		udpClientGetTime udpClientGetTime=new udpClientGetTime();
    		System.out.println(udpClientGetTime.getMip);
    	}
    
    	@Override
    	protected SpringApplicationBuilder configure(SpringApplicationBuilder application){
    		System.out.println("外部tomcat,chapter启动!");
    		return application.sources(DemoApplication.class);
    	}
    }
    

    2、@Autowire,添加注释。还是不行,因为在将在application的启动类中,如果要注入一个类,好像必须要静态引用,不要问我为什么,我也不晓得。但是尴尬就尴尬在这,如果静态引用你用value获取的值,那是获取不到的,null。属性不能用static final等修饰。下面是错误示范。

    @SpringBootApplication
    @EnableScheduling
    @ComponentScan()
    public class DemoApplication extends SpringBootServletInitializer {
    @Autowire
    	static
    	udpClientGetTime udpClientGetTime
    	public static void main(String[] args) {
    		SpringApplication.run(DemoApplication.class, args);
    		System.out.println(udpClientGetTime.getMip);
    	}
    
    	@Override
    	protected SpringApplicationBuilder configure(SpringApplicationBuilder application){
    		System.out.println("外部tomcat,chapter启动!");
    		return application.sources(DemoApplication.class);
    	}
    }
    

    3、在配置文件中继承启动类,将他做成一个启动项。突然想到,既然不能把想要开机启动的配置类引用到启动类里,那反过来呢?于是就想到,让想要开机启动的配置类继承启动类ApplicationRunner。可以,搞定,正解。

    public class udpClientGetTime() implements ApplicationRunner{
    		@Value("${udp.mip}")
    			public String mip;
    			………………
    				@Override
    	public void run(ApplicationArguments args) throws Exception {
    		// TODO Auto-generated method stub
        	System.out.println(getMip());
    	}
    }
    
    展开全文
  • Spring Boot 在logback.xml中无法读取application.yml中配置的日志路径 原因分析: logback.xml的加载顺序早于springboot的application.yml 常用解决方法: 1、source中带有${} springProperty scope="context...

    Spring Boot 在logback.xml中无法读取application.yml中配置的日志路径

    原因分析:

    logback.xml的加载顺序早于springboot的application.yml 

    常用解决方法:

    1、source中带有${}

    springProperty scope="context" name="LOG_HOME" source="logging.path"/>

    2、logback.xml名称不对

    logback.xml修改为:logback-spring.xml

    参考文章

    展开全文
  • IntelliJ IDEA修改读取配置文件的路径

    万次阅读 2016-12-04 15:53:55
    打开IntelliJ IDEA 2016.3(64)文件所在位置下的idea.properties 取消idea.properties中的idea.config.path、...修改idea.properties中的idea.config.path、idea.plugins.path。如下: #------------------------------
  • 通过配置中心统一修改配置文件,为方便管理,所有配置文件都整合到了Application.yml 配置中,其中redis 相关配置也整合到了Application.yml 文件中,发现以前通过读取配置文件绝对路径的方法不能适用读取配置中心的...
  • 注意填写自己安装的gradle路径5. 新建之后的工程时这样的6. 新建application.yml文件注意:ide默认对yml的支持不好,安装插件intellij-ansible-0.9.5支持即可,插件下载地址:http://pan.baidu.com/s/1nvgECTN 安装...
  • 程序提供一个接口,每次测评开始前会传过来3个IP地址,需要动态修改yml配置文件中程序连接的redis集群节点 添加依赖 <dependency> <groupId>org.yaml</groupId> <artifactId>snakeyaml<...
  • 读取application.yml下配置参数信息 在application.yml文件内容 my: remote-address: 192.168.1.1 yarn: weburl: http://192.168.1.1:8088/ws/v1/cluster/ security: username: foo roles: - ...
  • java读取解析application.yml 不用依赖spring容器,可单独使用。 第一步、首先要2个jar <!-- properties和yaml格式化 --> <dependency> <groupId>com.fasterxml.jackson.dataformat</groupId&...
  • 将文件中的xxxxxx替换为当前路径,并保留yml格式(空格,换行) 下面的:PATH方法好像没用 @echo off rem CMD:"color --help" :: setting color:back white,content blue color f9 ::old string and replace string ...
  • 背景说明 当我们使用springboot开发时,有的时候...在网上找了很多例子但是都是针对.properties文件,读取.yml文件会有问题,当我在看关于springboot加载yml文件时发现需要用到其他的类,YamlPropertiesFactoryBean...
  • 缺点:采用FileInputStream的时候我们必须将文件的路径传递给程序。否则程序找不到文件后会出现异常。考虑到我们的程序很多时候是编译后要部署到不同的生产环境的,如果每个环境不一样,难道我们每次都要来修改这个...
  • 修改thymeleaf模板默认路径

    千次阅读 2019-02-13 15:17:13
    修改thymeleaf模板默认路径 thymeleaf的模板默认路径是resources的templates,我想把模板放到webapp下,然后就弄了半天,最后终于发现问题了(想饿自己三天不吃饭~),记录一下这次惨痛的教训
  • 为了简化读取properties文件中的配置值,spring支持@value注解的方式来获取,这种方式大大简化了项目配置,提高业务中的灵活性。 两种使用方法 1)@Value("#{configProperties[‘key’]}") 2)@Value("${key}") ...
  • java项目启动时对yml文件的修改JYaml 方式启动前修改yaml 的class 文件(也是我用的方式)首先来一个工具类先(获取以及修改yaml文件的工具类)常量文件在springBoot 项目启动前先执行方法私有方法(用于修改yml文件...
  • 首先回忆一下在没有使用SpringBoot之前也就是传统的spring项目中是如何读取配置文件,通过I/O流读取指定路径的配置文件,然后再去获取指定的配置信息。传统项目读取配置方式读取xml配置文件public String readFrom...
  • 在SpringBoot项目,使用logback.xml中配置日志的存储位置时,读取application.properties或application.yml中配置的路径,在logback.xml中引用如下: <property name="LOG_HOME" value="${log.path}"/> ...
  • 修改springboot配置文件的路径

    千次阅读 2019-01-28 21:30:34
    1.默认情况下,resources下的application.yml是会被自动识别的; 2.和jar包同级的config文件夹中的配置...3.可以在jar启动的时候指定路径:java -jar xxx.jar --spring.config.location=xxx.yml,xxx.yml,xxx.yml...
  • 开发时本地使用绝对路径没啥问题,但部署上线时需要修改路径,所以把文件放在resources下,使用相对路径读取会更简单 File file = new File("test.xls"); 但是往往这时候会出现找不到文件的尴尬情况 我的解决办法是...
  • 写在前面 ...读取自定义配置 1.配置文件:sys.properties supply.place=云南 supply.code=002 2.配置类:SupplyConfig.java package com.example.config; import org.springframe...
  • 修改商品页面,添加上传商品图片功能。 1.2 springmvc中对多部件类型解析 在 页面form中提交enctype="multipart/form-data"的数据时,需要springmvc对multipart类型的数据进行解析。   在springmvc.xml中配置...
  • java的ResourceBundle类是用来读取properties的资源文件的,很多国际化操作都使用该类。 我需要用这个读取自己自定义的properties文件,一开始是这么写ResourceBundle.getBundle("gis.properties");启动工程竟然...
  • 一开始没那么多弯弯绕绕,反正什么配置文件,完全打包就完事,读取也是相对路径,IDE能跑,部署到服务器也不会有问题。 然后,如果要提升部署的质量,满足运维的要求,那就没那么简单了。比如我们可能面临: 1、...
  • 在使用log4j的时候,因为项目位置不确定需要频繁的修改日志的打印位置,所以我把项目的位置放在了application.yml里,使用Log4j.xml读取application.yml的配置信息。 <!--定义日志文件的存储地址 勿在 ...
  • python读取yaml文件后修改写入本地

    千次阅读 2018-12-26 13:53:41
    #用于python修改yaml文件 import yaml import os #获取当前脚本所在文件夹路径 curPath = os.path.dirname(os.path.realpath(“E:\”)) #获取yaml文件路径 yamlPath = os.path.join(curPath, “docker-compose.yml”...
  • MyProject项目的pom.xml就是我们的所说的父类型,它的打包类型要写成pom,如: 在MyProject下的pom.xml通过标签指定了子项目的相对路径。这就可以直接在MyProject项目里执行mvn命令,一次构建全部模块。当然,到每...
  • 在网上找到了很多关于springboot静态资源修改的解决方法,但因为修改路径各不相同,所以并不能有效根据自己情况去找到正确的路径 “spring.resources.static-locations”用于告诉Spring Boot应该在何处查找静态...
  • 一、yml配置文件的使用 SpringBoot 默认读取会 application.yml和application.properties文件,yml文件比properties更加简洁,结构...我们可以在配置文件中修改SpringBoot默认的端口号和项目的根路径,如下所示 ...
  • cloud: config: server: native: search-locations: classpath:/config springCloud 的读取配置路径如上, 配置中心目录如下 ...那么问题来了, 假如你修改了 apiGateway 这个yml, 再在浏览器上请求 这个配置文件...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 11,727
精华内容 4,690
关键字:

修改读取yml路径