Spring 的application.properties项目配置与注解

一、项目结构介绍

Spring 的application.properties项目配置与注解_第1张图片

如上图所示,Spring Boot的基础结构共三个文件:

src/main/java  程序开发以及主程序入口

src/main/resources 配置文件

src/test/java  测试程序

二、application.properties 配置文件

默认启动项目的url配置,不需要加项目路径默认为/ 可以自行修改。

端口默认8080 修改端口号为8888

项目名称server.context-path

server.port=8888
server.context-path=/HelloWorld

helloWorld=spring boot

@Value("${helloWorld}")根据key-value直接注入helloWorld

@RestController
public class HelloWorldController {

	@Value("${helloWorld}")
	private String helloWorld;
	
	
	@RequestMapping("/helloWorld")
	public String say(){
		return helloWorld;
	}

}

@RestController的意思就是controller里面的方法都以json格式输出,不用再写什么jackjson配置的了!

启动主程序,打开浏览器访问http://localhost:8080/HelloWorld/helloWorld,就可以看到效果了。页面输出spring boot

三、@Value将外部配置文件的值动态注入到Bean

配置文件主要有两类:

  • application.properties。application.properties在spring boot启动时默认加载此文件
  • 自定义属性文件。自定义属性文件通过@PropertySource加载。@PropertySource可以同时加载多个文件,也可以加载单个文件。如果相同第一个属性文件和第二属性文件存在相同key,则最后一个属性文件里的key启作用。加载文件的路径也可以配置变量,如下文的${anotherfile.configinject},此值定义在第一个属性文件config.properties

第一个属性文件config.properties内容如下: 
${anotherfile.configinject}作为第二个属性文件加载路径的变量值

book.name=bookName
anotherfile.configinject=placeholder

第二个属性文件config_placeholder.properties内容如下:

book.name.placeholder=bookNamePlaceholder

下面通过@Value(“${app.name}”)语法将属性文件的值注入bean属性值

@Component
// 引入外部配置文件组:${app.configinject}的值来自config.properties。
// 如果相同
@PropertySource({"classpath:com/hry/spring/configinject/config.properties",
    "classpath:com/hry/spring/configinject/config_${anotherfile.configinject}.properties"})
public class ConfigurationFileInject{
    @Value("${app.name}")
    private String appName; // 这里的值来自application.properties,spring boot启动时默认加载此文件

    @Value("${book.name}")
    private String bookName; // 注入第一个配置外部文件属性

    @Value("${book.name.placeholder}")
    private String bookNamePlaceholder; // 注入第二个配置外部文件属性

    @Autowired
    private Environment env;  // 注入环境变量对象,存储注入的属性值

    public String toString(){
        StringBuilder sb = new StringBuilder();
        sb.append("bookName=").append(bookName).append("\r\n")
        .append("bookNamePlaceholder=").append(bookNamePlaceholder).append("\r\n")
        .append("appName=").append(appName).append("\r\n")
        .append("env=").append(env).append("\r\n")
        // 从eniroment中获取属性值
        .append("env=").append(env.getProperty("book.name.placeholder")).append("\r\n");
        return sb.toString();
    }   
}

Application.java同上文

@RunWith(SpringRunner.class)
@SpringBootTest(classes=Application.class)
public class ConfiginjectApplicationTest {
    @Autowired
    private ConfigurationFileInject configurationFileInject;

    @Test
    public void configurationFileInject(){
        System.out.println(configurationFileInject.toString());
    }
}

测试结果

bookName=bookName
bookNamePlaceholder=bookNamePlaceholder
appName=appName
env=StandardEnvironment {activeProfiles=[], defaultProfiles=[default], propertySources=[Inlined Test Properties,systemProperties,systemEnvironment,random,applicationConfig: [classpath:/application.properties],class path resource [com/hry/spring/configinject/config_placeholder.properties],class path resource [com/hry/spring/configinject/config.properties]]}
env=bookNamePlaceholder

四、application.properties配置数据库连接

有前缀的属性注入

请求url

mysql.jdbcName=com.mysql.jdbc.Driver
mysql.dbUrl=jdbc:mysql://localhost:3306/db_boot
mysql.userName=root
mysql.password=123456

@Component 让spring加载

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

/**
 * Mysql属性配置文件
 * @author Administrator
 *
 */
@RestController
public class MysqlProperties {
       @Value("${mysql.jdbcName}")
	private String jdbcName;
       @Value("${mysql.dbUrl}")
	private String dbUrl;
       @Value("${mysql.userName}")
	private String userName;
	@Value("${mysql.password}")
	private String password;

	public String getJdbcName() {
		return jdbcName;
	}

	public void setJdbcName(String jdbcName) {
		this.jdbcName = jdbcName;
	}

	public String getDbUrl() {
		return dbUrl;
	}

	public void setDbUrl(String dbUrl) {
		this.dbUrl = dbUrl;
	}

	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;
	}
	
	
}

@ConfigurationProperties(prefix="mysql") 就是application配置文件的前缀mysql

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

/**
 * Mysql属性配置文件
 * @author Administrator
 *
 */
@Component
@ConfigurationProperties(prefix="mysql")
public class MysqlProperties {

	private String jdbcName;
	
	private String dbUrl;
	
	private String userName;
	
	private String password;

	public String getJdbcName() {
		return jdbcName;
	}

	public void setJdbcName(String jdbcName) {
		this.jdbcName = jdbcName;
	}

	public String getDbUrl() {
		return dbUrl;
	}

	public void setDbUrl(String dbUrl) {
		this.dbUrl = dbUrl;
	}

	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;
	}
	
	
}

@Component已经变为spring管理的bean了@Resource  直接引入

import javax.annotation.Resource;

import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;


@RestController
public class HelloWorldController {

	
	@Resource
	private MysqlProperties mysqlProperties;

	@RequestMapping("/showJdbc")
	public String showJdbc(){
		return "mysql.jdbcName:"+mysqlProperties.getJdbcName()+"
" +"mysql.dbUrl:"+mysqlProperties.getDbUrl()+"
" +"mysql.userName:"+mysqlProperties.getUserName()+"
" +"mysql.password:"+mysqlProperties.getPassword()+"
"; } }

五、spring处理http请求

@Controller 处理http请求的注解,请求后台转发页面

@RequestMapping 映射路径

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.servlet.ModelAndView;

@Controller
@RequestMapping("/freemarker")
public class HelloWorldFreemarkerController {

	@RequestMapping("/say")
	public ModelAndView say(){
		ModelAndView mav=new ModelAndView();
		mav.addObject("message", "springboot!");
		mav.setViewName("helloWorld");
		return mav;
	}
}

helloWorld的模板文件

helloWorld.ftl





Insert title here


show: ${message}

@PathVariable获取url参数

@RequestParam 获取get或post参数或者是form和url参数

rest风格的资源url请求

index.html





Insert title here





天天
搜索

import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
@RequestMapping("/ajax")
public class HelloWorldAjaxController {

	@RequestMapping("/hello")
	public String say(){
		return "{'message1':'SpringBoot你好','message2','Spring你好2'}";
	}
}

@PathVariable获取url参数


搜索
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.servlet.ModelAndView;

@Controller
@RequestMapping("/blog")
public class BlogController {

	@RequestMapping("/{id}")
	public ModelAndView show(@PathVariable("id") Integer id){
		ModelAndView mav=new ModelAndView();
		mav.addObject("id", id);
		mav.setViewName("blog");
		return mav;
	}
	
	@RequestMapping("/query")
	public ModelAndView query(@RequestParam(value="q",required=false)String q){
		ModelAndView mav=new ModelAndView();
		mav.addObject("q", q);
		mav.setViewName("query");
		return mav;
	}
}

blog.ftl





Insert title here


id:${id}

 

你可能感兴趣的:(经典后端)