【spring Boot】spring boot获取资源文件的三种方式【两种情况下】

首先声明一点,springboot获取资源文件,需要看是

  1》从spring boot默认的application.properties资源文件中获取

  2》还是从自定义的资源文件中获取

 

带着这个想法去看下面几种方式

===============================================================================================

1》从spring boot默认的application.properties资源文件中获取

先给出来application.properties的内容

#方式1
com.sxd.type1 = type1
com.sxd.title1 = 使用@ConfigurationProperties获取配置文件

#方式2
com.sxd.type2 = type2
com.sxd.title2 = 使用@Value获取配置文件

#方式3
com.sxd.type3 = type3
com.sxd.title3 = 使用Environment获取资源文件

#map
com.sxd.login[username] = sxd
com.sxd.login[password] = admin123
com.sxd.login[callback] = http://www.cnblogs.com/sxdcgaq8080/

#list
com.sxd.comList[0] = com1
com.sxd.comList[1] = com2
com.sxd.comList[2] = com3

View Code

 

①===第一种方式:使用@ConfigurationProperties获取配置文件

先搞一个绑定资源文件的bean

注意属性名和资源文件中的属性名相一致。

package com.sxd.beans;

import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.PropertySource;
import org.springframework.stereotype.Component;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

@Component
@ConfigurationProperties(prefix = "com.sxd")
//@PropertySource("classpath:/application.properties")
//不用这个注解,默认就是加载application.properties资源文件
public class User {

    private String type1;
    private String title1;

    private Map<String,String> login = new HashMap<>();
    private List<String> comList = new ArrayList<>();

    public String getType1() {
        return type1;
    }

    public void setType1(String type1) {
        this.type1 = type1;
    }

    public String getTitle1() {
        return title1;
    }

    public void setTitle1(String title1) {
        this.title1 = title1;
    }

    public Map<String, String> getLogin() {
        return login;
    }

    public void setLogin(Map<String, String> login) {
        this.login = login;
    }

    public List<String> getComList() {
        return comList;
    }

    public void setComList(List<String> comList) {
        this.comList = comList;
    }
}

View Code

然后在启动类中使用

package com.sxd.secondemo;

import com.sxd.beans.User;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.context.properties.EnableConfigurationProperties;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
@SpringBootApplication
@EnableConfigurationProperties(User.class)
public class SecondemoApplication {

    @Autowired
    User user;

    @RequestMapping("/")
    public String hello(){
        user.getLogin().forEach((k,v)->{
            System.out.println("map的键:"+k+">>map的值:"+v);
        });

        user.getComList().forEach(i->{
            System.out.println("list的值:"+i);
        });

        return user.getType1()+user.getTitle1();
    }

    public static void main(String[] args) {
        SpringApplication.run(SecondemoApplication.class, args);
    }
}

View Code

 

结果如下:

控制台打印:

访问地址:

 

②===第二种方式:使用@Value获取配置文件

这里不用搞一个绑定资源文件的bean了。

只需要在你想用的地方使用@Value调用你想要的属性名对应的值即可。

package com.sxd.secondemo;

import com.sxd.beans.User;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.context.properties.EnableConfigurationProperties;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
@SpringBootApplication
public class SecondemoApplication {

    @Value("${com.sxd.type2}")
    private String type;

    @Value("${com.sxd.title2}")
    private String title;

    @RequestMapping("/")
    public String hello(){
        return type+title;
    }

    public static void main(String[] args) {
        SpringApplication.run(SecondemoApplication.class, args);
    }
}

View Code

 

访问结果:

 

③===第三种方式:使用Environment获取资源文件

也不用提前做什么使用,Environment就是一个全局的资源池,application.properties中的属性值都可以从这里获取到。

package com.sxd.secondemo;

import com.sxd.beans.User;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.context.properties.EnableConfigurationProperties;
import org.springframework.core.env.Environment;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
@SpringBootApplication
public class SecondemoApplication {

    @Autowired
    Environment environment;

    @RequestMapping("/")
    public String hello(){
        return environment.getProperty("com.sxd.type3")+environment.getProperty("com.sxd.title3");
    }

    public static void main(String[] args) {
        SpringApplication.run(SecondemoApplication.class, args);
    }
}

View Code

 

运行结果:

================================================================================================

2》从自定义的资源文件中获取属性值

①===第一种方式:使用@ConfigurationProperties获取配置文件

 自定义资源文件如下:

然后指定绑定自定义资源文件

package com.sxd.beans;

import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.PropertySource;
import org.springframework.stereotype.Component;

@Component
@ConfigurationProperties(prefix = "com.sxd")
@PropertySource("classpath:/test.properties")
//需要用这个注解,默认就是加载application.properties资源文件,替换@ConfigurationProperties取消location属性的效果
public class User {

    private String type1;
    private String title1;

    public String getType1() {
        return type1;
    }

    public void setType1(String type1) {
        this.type1 = type1;
    }

    public String getTitle1() {
        return title1;
    }

    public void setTitle1(String title1) {
        this.title1 = title1;
    }

}

View Code

 

最后在启动类中使用一下

package com.sxd.secondemo;

import com.sxd.beans.User;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.context.properties.EnableConfigurationProperties;
import org.springframework.core.env.Environment;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
@SpringBootApplication
@EnableConfigurationProperties(User.class)
public class SecondemoApplication {

    @Autowired
    User user;

    @RequestMapping("/")
    public String hello(){
        return user.getType1()+user.getTitle1();
    }

    public static void main(String[] args) {
        SpringApplication.run(SecondemoApplication.class, args);
    }
}

View Code

 

 

运行结果:

 

②===第二种方式:使用@Value获取配置文件

先设定一个自定义资源文件

如下,自定义资源文件需要满足application-{profile}.properties格式

 

然后在application.properties文件中指明加载这个资源文件

spring.profiles.active=test
#spring.profiles.include=test

这两种哪种都可以加载上自定义的资源文件,后面的test就是上面{profile}的值

 

 最后在启动类中使用@Value获取自定义资源文件中的属性,这个时候自定义的资源文件已经在application,properties文件中被指明要被加载了,因此是可以被获取到的

package com.sxd.secondemo;

import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.context.properties.EnableConfigurationProperties;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
@SpringBootApplication
public class SecondemoApplication {

    @Value("${com.sxd.type2}")
    private String type;
    @Value("${com.sxd.title2}")
    private String title;

    @RequestMapping("/")
    public String hello(){
        return type+title;
    }

    public static void main(String[] args) {
        SpringApplication.run(SecondemoApplication.class, args);
    }
}

View Code

 

运行结果:

③===第三种方式:使用Environment获取资源文件

 

 首先还是写一个自定义的资源文件,文件命名同上面第二种方式一样

接着,在application.properties中声明加载这个自定义的资源文件

最后在启动类中,也就是哪里使用就在那里自动注入Environment.

package com.sxd.secondemo;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.core.env.Environment;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
@SpringBootApplication
public class SecondemoApplication {

    @Autowired
    Environment environment;

    @RequestMapping("/")
    public String hello(){
        return environment.getProperty("com.sxd.type3")+environment.getProperty("com.sxd.title3");
    }

    public static void main(String[] args) {
        SpringApplication.run(SecondemoApplication.class, args);
    }
}

View Code

 

 

运行结果:

 

==================================================================================================================

===================================================完成============================================================

 

时间: 2025-01-19 07:28:39

【spring Boot】spring boot获取资源文件的三种方式【两种情况下】的相关文章

【Spring】获取资源文件+从File+从InputStream对象获取正文数据

1.获取资源文件或者获取文本文件等,可以通过Spring的Resource的方式获取 2.仅有File对象即可获取正文数据 3.仅有InputStream即可获取正文数据   1 package com.sxd.test.test1; 2 3 import java.io.BufferedReader; 4 import java.io.File; 5 import java.io.FileReader; 6 import java.io.IOException; 7 import java.i

easyui-如何获取资源文件内容(或是弹出对话框中的内容)

问题描述 如何获取资源文件内容(或是弹出对话框中的内容) 先描述下需求:项目使用的是easyUI框架,表格第一列为"发送通知"按钮,点击后弹出一个对话框,其中为通知内容,对话框下有"确定发送"按钮.现在要求通知内容模板写在.properties中,其中的参数如"通知者姓名"需要根据所选行中的信息填入,然后点击"确定发送"后台需要获取整个通知内容(包含参数,即对话框的内容).目前我通过fmt标签获取的信息模板,并传入参数,但是不

js与jquery获取父元素,删除子元素的两种不同方法

 本篇文章主要是对js与jquery获取父元素,删除子元素的两种不同方法进行了介绍,需要的朋友可以过来参考下,希望对大家有所帮助 var obj=document.getElementById("id");得到的是dom对象,对该对象进行操作的时候使用js方法   var obj=$("#id");得到的是jquery对象,对该对象进行操作的时候使用jquery方法   1.对于上面获得的对象进行遍历   (1).js方法  for(vat i=0;j<obj

jsp获取表格中的内容,没有id的情况下,

问题描述 jsp获取表格中的内容,没有id的情况下, 点击修改可以获取该行的id或者标题都行,因为这里用了遍历,所以每次点击都获取的是最后一行的id值.<%for(int i=0;i int id=list.get(i).getN_id(); String name = list.get(i).getN_title(); String date=list.get(i).getN_publishTime(); %> <%=id %> <%session.setAttribute

webim 怎样获取最近联系人列表(在未添加好友的情况下/陌生人)

问题描述 webim 怎样获取最近联系人列表(在未添加好友的情况下/陌生人)第一次登录后与2至3个陌生人聊天后,是否有保存记录,下次登录时直接获取之前的联系人列表.求指教 解决方案 这个陌生人列表应该是本地维护一套,再次登陆加载, webim的聊天记录本地没有保存,再次登陆就没有了

【spring boot】3.spring boot项目,绑定资源文件为bean并使用

整个例子的结构目录如下:   1.自定义一个资源文件 com.sxd.name = 申九日木 com.sxd.secret = ${random.value} com.sxd.intValue = ${random.int} com.sxd.uuid = ${random.uuid} com.sxd.age= ${random.int(100)} com.sxd.resume = 简历:①姓名:${com.sxd.name} ②年龄:${com.sxd.age}   2.将资源文件中的属性绑定到

php 下载保存文件保存到本地的两种实现方法_php技巧

第一种: <?php function downfile() { $filename=realpath("resume.html"); //文件名 $date=date("Ymd-H:i:m"); Header( "Content-type: application/octet-stream "); Header( "Accept-Ranges: bytes "); Header( "Accept-Length

为导入文件加上时间戳标记的两种方法

问:如何给导入文件加上时间戳标记? 答:请参考下文中介绍的两种方法: 1.在DOS下从系统获得时间戳 利用Dos命令取得时间戳: C:\>echo %date% 2007-12-31 星期一 C:\>echo %date:~0,10% 2007-12-31 然后使用导出(exp)工具引用该时间戳就很容易了: exp userid=eygle/eygle file=d:\eygle%date:~0, 10%.dmp log=d:\eygle%date:~0,10%.log 2.使用SQL脚本从数

MyBatis获取自增长主键值的两种方式及源码浅析

昨天在做项目的时候遇到了一个坑,没错,就是获取MyBatis自增长主键值的坑.因为之前一直用ibatis,所以惯性的用了ibatis的写法,结果返回的值一直是1(受影响的行数).于是去翻了翻MyBatis的源码,发现它把主键值放到了参数对象上,获取主键值需要用参数对象去get主键值.真是坑.我先把解决办法放出来,然后再接着分析MyBatis的源码是怎么做的. 环境: 数据库MySql.User表,主键设置为自增长. CREATE TABLE `user` ( `id` INT(11) NOT N