Aooms_微服务基础开发平台实战_003_配置文件与简单的web环境搭建
一、前言
本篇文章介绍两个重点
(1) 工程核心配置文件application.yml
(2) 如何在一个标准的的SpringCloud工程上构建起一个基本的web结构
二、配置文件application.yml
下面贴一个简单的application.yml配置文件,以此展开说明
# 默认日志配置
logging:
file: Aooms.log
config: # 日志配置文件,Spring Boot默认使用classpath路径下的日志配置文件,如:logback.xml
level:
root: info # 全局默认级别
#net.aooms.core: info # 项目级别,覆盖root默认
# 默认项目配置
spring:
application:
name: Aooms
profiles:
active: dev
thymeleaf:
cache: false
mode: HTML5
prefix: /
suffix: .html
mvc:
static-path-pattern: /** #可不配置,默认也是此路径
(1)默认情况下,application.yml放在src / main / resources 根目录下,如果想更改配置文件路径或自定义配置文件名称,需要启动时指定如下,一般不建议修改:
java -jar myproject.jar --spring.config.location=classpath:/default.properties,classpath:/override.properties
(2)你也可以使用application.properties,只需要将yml文件的属性层级结构在properties文件中改为一行即可,使用的时候与yml一致,如下图
---> 
(3)配置属性 spring.profiles.active,此属性可指定在不同环境下使用对应环境的配置文件,如下

定义了application-dev.yml 与 application-prod.yml 文件 ,分别代表 开发环境 下的配置与 生成环境 下的配置,通过spring.profiles.active = dev 指定使用哪个配置文件,dev则代表使用application-dev.yml。
另外,如果你不想定义很多配置文件,还可以通过 “---”方式在同一个文件中进行不同环境下属性的定义,如下
# 默认日志配置
logging:
file: Aooms.log
config: # 日志配置文件,Spring Boot默认使用classpath路径下的日志配置文件,如:logback.xml
level:
root: info # 全局默认级别
#net.aooms.core: info # 项目级别,覆盖root默认
# 默认项目配置
spring:
application:
name: Aooms
profiles:
active: dev
thymeleaf:
cache: false
mode: HTML5
prefix: /
suffix: .html
mvc:
static-path-pattern: /** #可不配置,默认也是此路径
---
# 开发环境
spring:
profiles: dev
server:
port: 9000
---
# 生产环境
spring:
profiles: prod
server:
port: 9001
---注 开始---
关于“---”:“---”在yml文件中的作用用来区分多个文件,写了几个“---”等同于写了几个配置文件,最终的效果是一样的,关于yml文件的介绍与基本使用,大家自行查阅,此处不做过多介绍,这里给大家推荐一篇:http://www.ruanyifeng.com/blog/2016/07/yaml.html?f=tt
---注 结束---
当然spring.profiles.active属性的应用不止于此,你可以根据实际情况灵活运用
三、application.yml配置文件读取
application.yml配置文件读取有3中方式,分别如下:
(1)使用@Value注解

如上图所示,可以直接在属性上定义@Value注解,可以使用SpEL表达式,${} 中的属性对应配置文件的属性名称
(2)使用@ConfigurationProperties注解,配合Pojo类实现
配置定义类如下,使用@ConfigurationProperties,同时使用@Component 声明为Spring组件,在任意使用的地方进行注入
package net.aooms.core.properties;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.boot.context.properties.ConfigurationPropertiesBinding;
import org.springframework.context.annotation.Configuration;
import org.springframework.core.env.Environment;
import org.springframework.stereotype.Component;
/**
* application.yml 配置文件映射
* Created by cccyb on 2018-02-06
*/
@Component
@ConfigurationProperties(prefix="spring.application")
public class PropertiesApplication {
private String name;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
具体使用
package net.aooms.core.web;
import net.aooms.core.properties.PropertiesApplication;
import net.aooms.core.properties.PropertiesTest;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.env.PropertySourceLoader;
import org.springframework.core.env.Environment;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.servlet.ModelAndView;
import javax.servlet.http.HttpServletRequest;
/**
* 一个完整的控制器Demo,方便框架内部调试
* Created by cccyb on 2018-02-06
*/
@RestController
public class TestController {
private static Logger logger = LoggerFactory.getLogger(TestController.class);
@Autowired
private PropertiesApplication propertiesApplication;
@Value("${spring.application.name}")
private String name;
@GetMapping(value="/get")
public String get(String id) {
logger.error(" value from propertiesApplication : {} ",propertiesApplication.getName());
return "get do success";
}
}
(3)自定义ApplicationContextInitializer,配合Environment类实现
自定义ApplicationContextInitializer类
package net.aooms.core.properties;
import org.springframework.boot.env.YamlPropertySourceLoader;
import org.springframework.context.ApplicationContextInitializer;
import org.springframework.context.ConfigurableApplicationContext;
import org.springframework.core.env.PropertySource;
import org.springframework.core.io.Resource;
import org.springframework.util.StringUtils;
import java.io.IOException;
/**
* 自定义yaml文件加载
* Created by cccyb on 2018-02-06
*/
public class YamlPropertiesContextInitializer implements ApplicationContextInitializer<ConfigurableApplicationContext> {
@Override
public void initialize(ConfigurableApplicationContext applicationContext) {
try {
Resource resource = applicationContext.getResource("classpath:/application.yml");
String name = StringUtils.stripFilenameExtension(resource.getFilename());
YamlPropertySourceLoader sourceLoader = new YamlPropertySourceLoader();
PropertySource<?> yamlProperties = sourceLoader.load(name, resource, null);
applicationContext.getEnvironment().getPropertySources().addFirst(yamlProperties);
} catch (IOException e) {
throw new RuntimeException(e);
}
}
}
添加到启动

具体使用
package net.aooms.core.web;
import net.aooms.core.properties.PropertiesApplication;
import net.aooms.core.properties.PropertiesTest;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.env.PropertySourceLoader;
import org.springframework.core.env.Environment;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.servlet.ModelAndView;
import javax.servlet.http.HttpServletRequest;
/**
* 一个完整的控制器Demo,方便框架内部调试
* Created by cccyb on 2018-02-06
*/
@RestController
public class TestController {
private static Logger logger = LoggerFactory.getLogger(TestController.class);
@Autowired
private Environment environment;
@GetMapping(value="/get")
public String get(String id) {
logger.error(" id value from environment : {} ", environment.getProperty("server.port"));
return "get do success";
}
}
四、自定义配置文件的读取
自定义yml配置文件的读取,可使用如下两种方式
(1)可以通过上面的第三中自定义ApplicationContextInitializer实现,关于自定义及使用参考上面
(2)properties文件可以直接使用@PropertySource配合pojo实现,yml文件无法使用@PropertySource注解,可以使用@PropertySource结合@ConfigurationProperties的方式
配置定义类如下,使用@ConfigurationProperties,同时使用@Component 声明为Spring组件,在任意使用的地方进行注入
package net.aooms.core.properties;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.PropertySource;
import org.springframework.stereotype.Component;
/**
* 测试自定义配置文件映射
* Created by cccyb on 2018-02-06
*/
@Component
@ConfigurationProperties("test")
@PropertySource("/aooms/my.yml")
public class PropertiesTest {
private String name;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
具体使用
package net.aooms.core.web;
import net.aooms.core.properties.PropertiesApplication;
import net.aooms.core.properties.PropertiesTest;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.env.PropertySourceLoader;
import org.springframework.core.env.Environment;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.servlet.ModelAndView;
import javax.servlet.http.HttpServletRequest;
/**
* 一个完整的控制器Demo,方便框架内部调试
* Created by cccyb on 2018-02-06
*/
@RestController
public class TestController {
private static Logger logger = LoggerFactory.getLogger(TestController.class);
@Autowired
private PropertiesTest propertiesTest;
@GetMapping(value="/get")
public String get(String id) {
logger.error(" id value from testApplication : {} ", propertiesTest.getName());
return "get do success";
}
}
四、日志框架logback配置
Aooms目前使用的SpringBoot版本是2.0.0.M7,默认内置日志框架为logback,集成了logback的默认配置文件,可在spring-boot.jar包org.springframework.boot.logging.logback中找到,配置在application.yml中可进行定义,如下:
# 默认日志配置
logging:
file: Aooms.log
config: # 日志配置文件,Spring Boot默认使用classpath路径下的日志配置文件,如:logback.xml
level:
root: info # 全局默认级别
#net.aooms.core: info # 项目级别,覆盖root默认
五、简单的控制器Demo
一个简单的控制器,为了方面后面框架的测试、调试,此demo会随着框架不断更新,最终会是一个完整的包含SpringMVC各种情况的使用
package net.aooms.core.web;
import net.aooms.core.properties.PropertiesApplication;
import net.aooms.core.properties.PropertiesTest;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.env.PropertySourceLoader;
import org.springframework.core.env.Environment;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.servlet.ModelAndView;
import javax.servlet.http.HttpServletRequest;
/**
* 一个完整的控制器Demo,方便框架内部调试
* Created by cccyb on 2018-02-06
*/
@RestController
public class TestController {
private static Logger logger = LoggerFactory.getLogger(TestController.class);
@Autowired
private PropertiesApplication propertiesApplication;
@Autowired
private PropertiesTest propertiesTest;
@Value("${spring.application.name}")
private String name;
@Autowired
private Environment environment;
@GetMapping(value="/get")
public String get(String id) {
logger.error(" value from propertiesApplication : {} ",propertiesApplication.getName());
logger.error(" value from property : {} ", name);
logger.error(" id value from param : {} ", id);
logger.error(" id value from testApplication : {} ", propertiesTest.getName());
logger.error(" id value from environment my.yml: {} ", environment.getProperty("my","test.name"));
logger.error(" id value from environment my2.yml: {} ", environment.getProperty("my2","test.name"));
return "get do success";
}
@GetMapping(value="/get2")
public String get2(HttpServletRequest request) {
logger.error(" id value from param : {} ", request.getParameter("id"));
return "get2 do success";
}
@GetMapping(value="/get3")
public ModelAndView get3(HttpServletRequest request,ModelAndView mv) {
logger.error(" id value from param : {} ", request.getParameter("id"));
mv.addObject("name", "张三");
mv.setViewName("/test.html");
return mv;
}
}
六、页面、静态资源的集成
SpringBoot默认加载的静态资源路径为/static /public /resources /META-INF/resources,默认的搜索路径为/**,也就是会在上面的所有路径中进行资源搜索加载,可以通过spring.mvc.static-path-pattern=/resources/** 进行路径自定义
SpringBoot默认使用的模版引擎为thymeleaf,首先需要添加maven依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>
然后thymeleaf 在application.yml中的配置如下
thymeleaf:
cache: false #禁用缓存
mode: HTML5 #html5标准
prefix: / #前缀路径
suffix: .html #模版文件后缀
Aooms框架中,将静态资源全部放在/META-INF/resources目录下,Servlet3.0规范也是定义了资源文件在/META-INF/resources目录下,为了提高框架的兼容性,统一结构,因此将资源文件放置在此目录下。
七、调试、访问
/META-INF/resources目录下有 test.html 与 jquery.min.js 文件

TestController控制器 get3 方法渲染了test.html模版
@GetMapping(value="/get3")
public ModelAndView get3(HttpServletRequest request,ModelAndView mv) {
logger.error(" id value from param : {} ", request.getParameter("id"));
mv.addObject("name", "张三");
mv.setViewName("/test.html");
return mv;
}
启动应用后,访问http://localhost:9000/get3,出现如下内容,说明一个基本的web工程构建及配置文件定义完成

五、项目地址
Github地址:https://github.com/yuboon/Aooms
Demo演示:https://www.yuboon.com/Aooms
Aooms_微服务基础开发平台实战_003_配置文件与简单的web环境搭建的更多相关文章
- Aooms_微服务基础开发平台实战_002_工程构建
一.关于框架更名的一点说明 最近在做年终总结.明年规划.还有几个项目需要了结.出解决方案,事情还比较多,死了不少脑细胞,距离上一篇文章发出已经过了3天,是不是有些人会认为我放弃了又不搞了,NONO,一 ...
- Aooms_微服务基础开发平台实战_001_开篇
一.引子 “ 微服务”近年来很火的一个词,如今的热度不亚于当年的SSH组合,各种开发框架.中间件.容器.概念层出不穷. 比如:dubbo.motan.zookeeper.springboot.spri ...
- Apollo-open-capacity-platform 微服务能力开发平台 (转)
来自大佬的apollo整合微服务的教程:欢迎大家点评和star,链接如下:https://gitee.com/owenwangwen/open-capacity-platform 官方demo链接:h ...
- 开发指南专题十一:JEECG微云高速开发平台--基础用户权限
版权声明:本文为博主原创文章.未经博主同意不得转载. https://blog.csdn.net/zhangdaiscott/article/details/26580037 开发指南专题 ...
- 专题开发十二:JEECG微云高速开发平台-基础用户权限
专题开发十二:JEECG微云高速开发平台-基础用户权限 11.3.4自己定义button权限 Jeecg中.眼下button权限设置,是通过对平台自己封装的button标签(<t:dgFun ...
- Springcloud 微服务 高并发(实战1):第1版秒杀
疯狂创客圈 Java 高并发[ 亿级流量聊天室实战]实战系列之15 [博客园总入口 ] 前言 前言 疯狂创客圈(笔者尼恩创建的高并发研习社群)Springcloud 高并发系列文章,将为大家介绍三个版 ...
- SpringCloud微服务基础学习
看了蚂蚁课堂的微服务学习,确实学习了不少关于微服务的知识,现在总结学习如下 : SpringCloud微服务基础单点系统架构传统项目架构传统项目分为三层架构,将业务逻辑层.数据库访问层.控制层放入在一 ...
- 开发指南专题十四:JEECG微云高速开发平台MiniDao 介绍
版权声明:本文为博主原创文章,未经博主同意不得转载. https://blog.csdn.net/zhangdaiscott/article/details/27068645 开发指南专题十四:J ...
- NET Core微服务之路:实战SkyWalking+Exceptionless体验生产下追踪系统
原文:NET Core微服务之路:实战SkyWalking+Exceptionless体验生产下追踪系统 前言 当一个APM或一个日志中心实际部署在生产环境中时,是有点力不从心的. 比如如下场景分析的 ...
随机推荐
- Vue 项目: npm run dev 报错 webpack-dev-server
从码云上下载vue项目,运行npm run dev 时报错: > webpack-dev-server --inline --progress --config build/webpack.de ...
- vue 值的更新
用了vue开发了一段时间,基本上感觉都是比较好用的一个框架,刚开始还是会存在一些小坑的东西,这里先浅谈下值的更新问题. 1.本组件的一些变量,或者是主view(路由页面)一些值,是通过vuex 中st ...
- 完整的系统帮助类Utils
//来源:http://www.cnblogs.com/yuangang/p/5477324.html using System; using System.Collections.Generic; ...
- spring boot 集成 Redis
前提:你已经安装了Redis 1.创建一个spring boot 工程 2.pom 引入依赖:spring-boot-starter-data-redis <dependency> < ...
- git 服务器搭建与运用
环境:CentOS 6 为了不影响后面的安装 安装依赖库 yum install curl-devel expat-devel gettext-devel openssl-devel zlib-dev ...
- MS SQL计算最大公约数和最小公倍数函数
/*求两个数的最大公约数*/ CREATE FUNCTION f_GetGys ( @num1 BIGINT , @num2 BIGINT ) RETURNS BIGINT AS BEGIN DECL ...
- Data Center(5): 实例
我们来分析从外网访问内网的服务的具体过程: 首先我们看DNS和Load Balancer是怎么工作的. 客户端要访问我们的系统,发送了一个https请求,https://nova.mycompany. ...
- NET Core微服务之路:基于Ocelot的API网关Relay实现--RPC篇
前言 我们都知道,API网关是工作在应用层上网关程序,为何要这样设计呢,而不是将网关程序直接工作在传输层.或者网络层等等更底层的环境呢?让我们先来简单的了解一下TCP/IP的五层模型. (图片 ...
- [python] 溜了,溜了,七牛云图片资源批量下载 && 自建图床服务器
故事背景: 七牛云最近一波测试域名操作真是把我坑死了!这简直和百度赠送你2T网盘,之后再限速一样骚操作.于是,痛定思痛自己买个云主机.自己搭图床应用! 1.七牛图片批量下载到本地 1.1 曲折尝试 当 ...
- 接口调试之Postman 使用方法详解
一.Postman背景介绍 用户在开发或者调试网络程序或者是网页B/S模式的程序的时候是需要一些方法来跟踪网页请求的,用户可以使用一些网络的监视工具比如著名的Firebug等网页调试工具.今天给大家介 ...