array(2) { ["docs"]=> array(10) { [0]=> array(10) { ["id"]=> string(3) "428" ["text"]=> string(77) "Visual Studio 2017 单独启动MSDN帮助(Microsoft Help Viewer)的方法" ["intro"]=> string(288) "目录 ECharts 异步加载 ECharts 数据可视化在过去几年中取得了巨大进展。开发人员对可视化产品的期望不再是简单的图表创建工具,而是在交互、性能、数据处理等方面有更高的要求。 chart.setOption({ color: [ " ["username"]=> string(8) "DonetRen" ["tagsname"]=> string(55) "Visual Studio 2017|MSDN帮助|C#程序|.NET|Help Viewer" ["tagsid"]=> string(23) "[401,402,403,"300",404]" ["catesname"]=> string(0) "" ["catesid"]=> string(2) "[]" ["createtime"]=> string(10) "1511400964" ["_id"]=> string(3) "428" } [1]=> array(10) { ["id"]=> string(3) "427" ["text"]=> string(42) "npm -v;报错 cannot find module "wrapp"" ["intro"]=> string(288) "目录 ECharts 异步加载 ECharts 数据可视化在过去几年中取得了巨大进展。开发人员对可视化产品的期望不再是简单的图表创建工具,而是在交互、性能、数据处理等方面有更高的要求。 chart.setOption({ color: [ " ["username"]=> string(4) "zzty" ["tagsname"]=> string(50) "node.js|npm|cannot find module "wrapp“|node" ["tagsid"]=> string(19) "[398,"239",399,400]" ["catesname"]=> string(0) "" ["catesid"]=> string(2) "[]" ["createtime"]=> string(10) "1511400760" ["_id"]=> string(3) "427" } [2]=> array(10) { ["id"]=> string(3) "426" ["text"]=> string(54) "说说css中pt、px、em、rem都扮演了什么角色" ["intro"]=> string(288) "目录 ECharts 异步加载 ECharts 数据可视化在过去几年中取得了巨大进展。开发人员对可视化产品的期望不再是简单的图表创建工具,而是在交互、性能、数据处理等方面有更高的要求。 chart.setOption({ color: [ " ["username"]=> string(12) "zhengqiaoyin" ["tagsname"]=> string(0) "" ["tagsid"]=> string(2) "[]" ["catesname"]=> string(0) "" ["catesid"]=> string(2) "[]" ["createtime"]=> string(10) "1511400640" ["_id"]=> string(3) "426" } [3]=> array(10) { ["id"]=> string(3) "425" ["text"]=> string(83) "深入学习JS执行--创建执行上下文(变量对象,作用域链,this)" ["intro"]=> string(288) "目录 ECharts 异步加载 ECharts 数据可视化在过去几年中取得了巨大进展。开发人员对可视化产品的期望不再是简单的图表创建工具,而是在交互、性能、数据处理等方面有更高的要求。 chart.setOption({ color: [ " ["username"]=> string(7) "Ry-yuan" ["tagsname"]=> string(33) "Javascript|Javascript执行过程" ["tagsid"]=> string(13) "["169","191"]" ["catesname"]=> string(0) "" ["catesid"]=> string(2) "[]" ["createtime"]=> string(10) "1511399901" ["_id"]=> string(3) "425" } [4]=> array(10) { ["id"]=> string(3) "424" ["text"]=> string(30) "C# 排序技术研究与对比" ["intro"]=> string(288) "目录 ECharts 异步加载 ECharts 数据可视化在过去几年中取得了巨大进展。开发人员对可视化产品的期望不再是简单的图表创建工具,而是在交互、性能、数据处理等方面有更高的要求。 chart.setOption({ color: [ " ["username"]=> string(9) "vveiliang" ["tagsname"]=> string(0) "" ["tagsid"]=> string(2) "[]" ["catesname"]=> string(8) ".Net Dev" ["catesid"]=> string(5) "[199]" ["createtime"]=> string(10) "1511399150" ["_id"]=> string(3) "424" } [5]=> array(10) { ["id"]=> string(3) "423" ["text"]=> string(72) "【算法】小白的算法笔记:快速排序算法的编码和优化" ["intro"]=> string(288) "目录 ECharts 异步加载 ECharts 数据可视化在过去几年中取得了巨大进展。开发人员对可视化产品的期望不再是简单的图表创建工具,而是在交互、性能、数据处理等方面有更高的要求。 chart.setOption({ color: [ " ["username"]=> string(9) "penghuwan" ["tagsname"]=> string(6) "算法" ["tagsid"]=> string(7) "["344"]" ["catesname"]=> string(0) "" ["catesid"]=> string(2) "[]" ["createtime"]=> string(10) "1511398109" ["_id"]=> string(3) "423" } [6]=> array(10) { ["id"]=> string(3) "422" ["text"]=> string(64) "JavaScript数据可视化编程学习(二)Flotr2,雷达图" ["intro"]=> string(288) "目录 ECharts 异步加载 ECharts 数据可视化在过去几年中取得了巨大进展。开发人员对可视化产品的期望不再是简单的图表创建工具,而是在交互、性能、数据处理等方面有更高的要求。 chart.setOption({ color: [ " ["username"]=> string(7) "chengxs" ["tagsname"]=> string(28) "数据可视化|前端学习" ["tagsid"]=> string(9) "[396,397]" ["catesname"]=> string(18) "前端基本知识" ["catesid"]=> string(5) "[198]" ["createtime"]=> string(10) "1511397800" ["_id"]=> string(3) "422" } [7]=> array(10) { ["id"]=> string(3) "421" ["text"]=> string(36) "C#表达式目录树(Expression)" ["intro"]=> string(288) "目录 ECharts 异步加载 ECharts 数据可视化在过去几年中取得了巨大进展。开发人员对可视化产品的期望不再是简单的图表创建工具,而是在交互、性能、数据处理等方面有更高的要求。 chart.setOption({ color: [ " ["username"]=> string(4) "wwym" ["tagsname"]=> string(0) "" ["tagsid"]=> string(2) "[]" ["catesname"]=> string(4) ".NET" ["catesid"]=> string(7) "["119"]" ["createtime"]=> string(10) "1511397474" ["_id"]=> string(3) "421" } [8]=> array(10) { ["id"]=> string(3) "420" ["text"]=> string(47) "数据结构 队列_队列实例:事件处理" ["intro"]=> string(288) "目录 ECharts 异步加载 ECharts 数据可视化在过去几年中取得了巨大进展。开发人员对可视化产品的期望不再是简单的图表创建工具,而是在交互、性能、数据处理等方面有更高的要求。 chart.setOption({ color: [ " ["username"]=> string(7) "idreamo" ["tagsname"]=> string(40) "C语言|数据结构|队列|事件处理" ["tagsid"]=> string(23) "["246","247","248",395]" ["catesname"]=> string(12) "数据结构" ["catesid"]=> string(7) "["133"]" ["createtime"]=> string(10) "1511397279" ["_id"]=> string(3) "420" } [9]=> array(10) { ["id"]=> string(3) "419" ["text"]=> string(47) "久等了,博客园官方Android客户端发布" ["intro"]=> string(288) "目录 ECharts 异步加载 ECharts 数据可视化在过去几年中取得了巨大进展。开发人员对可视化产品的期望不再是简单的图表创建工具,而是在交互、性能、数据处理等方面有更高的要求。 chart.setOption({ color: [ " ["username"]=> string(3) "cmt" ["tagsname"]=> string(0) "" ["tagsid"]=> string(2) "[]" ["catesname"]=> string(0) "" ["catesid"]=> string(2) "[]" ["createtime"]=> string(10) "1511396549" ["_id"]=> string(3) "419" } } ["count"]=> int(200) } 222 《SpringCloud 微服务实战 》 第2章:微服务构建:Spring Boot - 爱码网

SprignBoot框架简介

   本节主要简单介绍一下SpringBoot:除了它是SpringCloud的基础之外,也由于自身的各项优点,如自动配置、快速开发、轻松部署等,非常适合作为微服务架构中各项具体服务的构建单元。

   SpringBoot除了解决配置问题之外,SpringBoot还通过一系列Starter POMs 的定义,让我们整合各项功能的时候,不需要在Maven的pom.xml中维护那些错综复杂的依赖关系,而是通过类似模块化的Starter模块定义引用,使得依赖管理工作变得更为简单。如今容器化大行其道的时代,SpringBoot除了可以很好的融入Docker之外,其自身就支持嵌入式的Tomcat、Jetty等容器。所以,通过SpringBoot构建的项目不再需要自身安装Tomcat,将自身应用打包成war,再部署到Tomcat这样复杂的构建与部署工作,只需要将SprignBoot应用打包成jar包,并通过java -jar 命令直接运行就能启动一个标准化的Web应用,非常轻便。

快速入门

我们通过Spring 官方的项目构建工具Spring Initializer生成一个SpringBoot基础项目,并实现网页输出一个HelloWorld的RESTful接口。

配置文件:SpringBoot的默认配置文件位置为 src/main/resources/application.properties. 关于SpringBoot应用的配置文件内容 都可以几种在该文件中,根据我们引入的不同的Starter模块,可以在这里定义容器的端口号、数据库连接信息、日志级别等各种配置信息,比如,我们需要自定义WEB模块的服务端口号,可以在application.properties中添加server.port=8888 来制定服务的端口号为8888,也可以通过spring.application.name=hello类指定应用名(该名字在后续的SpringCloud中会被注册为服务名)。SpringBoot的配置文件可以只用传统的properties文件之外,还支持在被广泛推荐的YAML文件。

YAML (英语发音为 /'jaemsl/,尾音类似 camel骆驼)是一个可读性高,用来 表达资料序列的格式。 YAML参考了其他多种语言,包括 C语言、Python、Perl, 并 从 XML、电子邮件的数据格式 ( RFC 2822)中获得灵感。 Clark Evans在 2001 年首次发表了这种语言, Ingy ddt Net与 
Oren Ben-Kiki也是这种语言的共同设计 者。目前已经有数种编程语言或脚本语言支持(或者说解析)这种语言。YAML是YAML Ain’t a Markup Language ( YAML不是一种标记语言)的缩写。在开发这种语言时, YAML的意思其实是 : Yet Another Markup Language (仍是一种标记语
言),但为了强调这种语言以数据作为中心,而不是以标记语言为重点,而用反向缩略语重新命名。 YAML的语法和其他高阶语言类似,并且可以简单地表达清单、散列表、标量等形态。它使用空白符号缩排和大量依赖外观的特色,特别适合用来表达或编辑数据结构、各种设定文档、文件大纲(例
如,许多电子邮件标题格式和 YAML非常接近 ) 。 尽管它比较适合表达阶层式 ( hierarchical model)的数据结构,不过也有精致的语法可以表示关联性( relational model)的资料。由于 YAML使用空白符号和分行来分隔资料,使得它特别适合用 grep/Python/Perl /Ruby操作。其让人最容易上
手的特色是巧妙避开各种封闭符号,如引号、各种括号等,这些符号在巢状结构时会变得复杂而难以辨认。
                                                                                ----------维基百科

YAML采用的配置格式不像properties的配置那样以单纯的简直对形式来表示,而是以类似大纲的缩进形式来表示,其结构更为清晰易读,同事配置内容的字符量也得到显著减少。除此之外,YAML还可以在一个单个的文件中通过spring.profiles属性来定义多个不同的环境配置。

注意:YAML目前还有一些不足,他无法通过@propertySource注解来加载配置、但是,YAML降属性加载到内存中保存的时候是有序的,所以当配置文件中的信息需要具备顺序含义,YAML的配置方式比起properties配置文件更有优势。记住一个点,当application.properties和application.yml同时存在时,properties的优先级更高。

自定义参数:应用中可以通过@Value注解来加载自定义参数 ${},${}同样可以在配置文件中进行参数的引用。

使用随机数

《SpringCloud 微服务实战 》 第2章:微服务构建:Spring Boot

 

 

命令行参数:java -jar xxx.jar  --server.port = 9999  ,可以世界以命令行的方式来设置server.port属性,并将应用的端口设置为9999,在用命令行的方式启动Springboot应用是 ,连续的两个减号 --就是对application.properties中的属性进行复制的标识。

 

多环境配置:我们在开发的时候,通常一套程序会被安装到几个不同的环境中,比如开发、测试、生产等,都需要不同的数据库地址、服务器端口,如果在未不同的环境打包都需要频繁修改配置文件的话,那必须是一个非常繁琐的事情。

 

对于多环境的配置,SpringBoot只需要提供几个满足  application-{profile}.properties  的格式,其中{profile}对应环境标识,如下所示:

application-dev.properties   :开发环境

application-test.properties :测试环境

application-prod.properties :生产环境

以上三个配置文件,至于那个文件会被项目加载,需要早application.pro[perties 文件中通过spring.profiles.active属性来设置,其值对应配置文件名的 profile 值。如果spring.profiles.active = test ,那么就会加载application-test.properties配置文件的内容。

 

相关文章: