admin 管理员组文章数量: 887086
2024年1月16日发(作者:ubuntu cmake安装)
SpringBoot研究和应用王永和,张劲松,邓安明,周智勋(云南云电同方科技有限公司,云南昆明650218)摘要:SpringBoot是一个用于简化、加速Spring开发的框架,文章对SpringBoot的开发做了简要介绍,之后对整合传统Spring的开发做了探索性研究。关键词:SpringBoot;开发;整合传统Spring中图分类号:TN943.6文献标识码:A文章编号:1673-1131(2016)10-0091-041SpringBoot简介SpringBoot是在2013年推出的新项目,主要用来简化Spring开发框架的开发、配置、调试、部署工作,同时在项目内集成了大量易于使用且实用的基础框架。在SpringBoot中集成的基础框架,是在开发中经常需要使用的框架,如内嵌容器(Tomcat、Jettty、Undertow)、日志框架、JMS框架、持久化框架、流行的NOSQL数据库(Cassandra、MongoDB)、缓存框架等。在传统的Spring框架中开发,用户需要自行编写XML文件,并在Maven、Gradle中加入相应的依赖包,在响应的代码中添加功能代码,才能使用。同时对于引入多个依赖包时,包之间的版本调整也是个困难的问题,经常需要对依赖包的版本冲突进行处理。调整依赖2.1.6重连编组位置识别由于所有节点的应用程序相同,为了让显示器能正确读取到编组的数据并进行编组区分,通过综合判断各个编组的编组编号、编组索引之间的关联关系,分别定义编组1、编组2、编组3,并将3个编组的数据分别发送至本编组固定的MVB端口,由显示器读取并显示到正确的位置。各个编组的MVB主节点根据确定的重连拓扑与本节点的编组编号,节点索引以及本编组的拓扑进行分析,将编组号映射到显示器上显示的车辆编号。2.2重连列车行驶方向2.2.1全车行驶方向全车的行驶方向应由主控车司机室的方向命令唯一确定。司机通过输入向前或是向后命令,控制全车向主控车的头车或者尾车方向行驶。该方向命令传输到WTB过程数据的全车控制信息,通过WTB网络控制编组的运动方向。2.2.2非主控编组牵引方向列车的牵引逆变器通过正相序或反相序输出交流电来控制牵引电机和车辆轮对的正转或者反转,从而实现司机所期望的列车“向前”或者“向后”运行。所有编组在收到主控车的方向命令后,根据自编组与主控编组拓扑关系判断本编组的牵引方向,并逐个向每一个牵引逆变器单独发送“正向”或“反向”指令。2.3WTB协议与整车控制整车控制信息和关键状态信息数据量小,实时性要求高;用于显示和记录的状态和故障信息数据量大,实时性要求较低。WTB端口大小为128字节,为了最大限度利用总线带宽,同时降低总线负荷,对实时性要求不高的状态数据进行分页包的版本以及冲突问题是一个费时费力、重复、繁琐的工作。如果使用SpringBoot开发,仅需在Maven、Gradle配置文件中加上少量的配置,即可在代码中使用所需的框架,让原本的配置简化到几乎是零代码、零XML配置,同时依赖包的版本问题也由SpringBoot轻松解决。SpringBoot对目前的的主流构建工具Maven、Gradle都提供了良好的支持,对其他构建工具也提供了支持,如Ant,但是相对Maven、Gradle来说,支持的力度相对要少些,所以需要尽量使用Maven、Gradle来构建SpringBoot程序。本文的构建环境是Maven,使用Gradle可以参考SpringBoot的官方Reference文档。2简单示例HelloWorld开发对比2.1使用传统Spring开发HelloWorld程序分周期发送,通过写入页码的方法识别每个周期发送的设备状态,将节点的128字节平均分为控制信息、关键状态、设备状态和故障信息4个部分,控制信息和关键状态部分的所有信息在每个周期内都实时发送,各编组的设备状态与故障信息分页分周期发送。在协议的第95和第127字节分别加入页码用于识别当前周期发送的状态和故障页。3实现效果实际测试结果表明:实时性要求较高的控制数据与关键状态的发送周期为16ms,实时性要求相对较低的全车设备状态单页发送周期为80ms,总发送周期为1040ms,重连后控制信息能够准确达到所有编组,所有编组的拓扑结构与设备状态都能够实时准确地显示。4结语本文在原有的基础上重新设计动车组重连控制逻辑,有效解决了可变编组与编组方式的多编组自动重连逻辑,保证了重连拓扑与多编组设备状态显示的实时性和准确性。参考文献:[1]李国平.列车通信网络WTB_MVB与LonWorks的技术比较与应用[J].铁道车辆,2004(1):27-30.[2]姜娜.WTB底层协议的研究与实现[D].北京交通大学,2007.[3]蔡国强,贾利民,刘春煌,李熙.绞线式列车总线初运行算法分析[J].铁路计算机应用,2007(5):8-10.作者简介:张卫杰(1989-),男,湖南人,工程师,主要从事动车网络研发工作。91
信息通信使用传统Spring开发一个HelloWorld的Web程序,构建开发工程是一个比较繁琐的过程,典型的工程,需要修改、配置一下4个文件:、、、,即使在IDE运行、调试,还是需要配置好J2EE容器才能进行调试工作。如果要进行运维、部署工作,还需要用IDE将应用打包为war文件,之后还要进行J2EE容器的配置、部署,再将war文件部署到容器中运行,才能看到运行效果。2.2使用SpringBoot开发HelloWorld程序使用SpringBoot开发HelloWorld程序,所需的工作量将大大减少。仅仅需要修改、配置2个文件:、,借助SpringBoot框架内的内嵌容器,在IDE即可轻松启动Web程序。核心内容如下:
信息通信(1)命令行参数;(2)来自于java:comp/env的JNDI属性;(3)Java系统属性(perties());(4)操作系统环境变量;(5)只有在random.*里包含的属性会产生一个RandomValu-ePropertySource;(6)在打包的jar外的应用程序配置文件(-erties,包含YAML和profile变量);(7)在打包的jar内的应用程序配置文件(-erties,包含YAML和profile变量);(8)在@Configuration类上的@PropertySource注解;(9)默认属性(使用aultProperties指定)。下面是一个具体的示例,从外部环境中获取的属性(数据库端口):代码示例:获取外部资源参数publicclassApplication{@Value("${}")privateStringextResource;publicstaticvoidmain(String[]args)throwsException{(,args);}}SpringBoot的配置文件有2种格式,分别是properties和YAML。3.2.1Application属性文件SpringApplication会从以下位置加载ties文件,并把它们添加到SpringEnvironment中:(1)当前目录下的一个/config子目录;(2)当前目录;(3)一个classpath下的/config包;(4)classpath根路径(root)。这个列表是按优先级排序的(列表中位置高的将覆盖位置低的)。注:你可以使用YAML('.yml')文件替代'.properties'。如果不喜欢将ties作为配置文件名,你可以通过指定环境属性来切换其他的名称。你也可以使用on环境属性来引用一个明确的路径(目录位置或文件路径列表以逗号分割)。3.2.2YAMLYAML是JSON的一个超集,也是一种方便的定义层次配置数据的格式。无论你何时将SnakeYAML库放到classpath下,SpringApplication类都会自动支持YAML作为properties的替换。从下面的样例代码可知YAML易于人工书写、观察,缺点是YAML文件不能通过@PropertySource注解加载。YAML样例(代码来自/):nvironments:dev:url:e:DeveloperSetupprod:url:e:MyCoolApp王永和等:SpringBoot研究和应用对应的Properties(代码来自/)====MyCoolApp3.2.3Profiles在SpringBoot可以通过@Profiles来限制某些配置类的加载。如图10所示,代码中的配置,仅在环境的Profile为pro-duction才被加载,如果Profile为其他值,此配置类则不会被加载。通过环境变量控制@Profiles,从而可以灵活控制程序的加载。Profiles示例:@Configuration@Profile("production")publicclassProductionConfiguration{//...}如下面的代码,在ties中的激活Profile为:dev,hsqldb。=dev,hsqldb3.2.4开发Web应用在传统的springMVC、RESTful开发,需要手工处理XML,进行许多配置,在SpringBoot,仅需在maven配置添加一项:spring-boot-starter-web,如图1所示。图1SpringBootWeb程序的Maven配置文件3.2.5使用JPA操作数据库在SpringBoot使用JSP操作数据库,操作十分简单,仅需要在Maven配置加入pom项目:spring-boot-starter-data-jpa,如图2所示。然后定义需要的实体类:Customer,代码如下:@EntitypublicclassCustomerimplementsSerializable{@Id@GeneratedValueprivateLongid;@Column(nullable=false)privateStringname;@Column(nullable=false)privateIntegerage;//...additionalmembers,ofteninclude@OneToManyma-ppingsprotectedCustomer(){//no-argsconstructorrequiredbyJPAspec93
信息通信//thisoneisprotectedsinceitshouldn'tbeuseddirectly}publicCustomer(Stringname,intage){=name;=age;}publicStringgetName(){;}//...etc}根据业务需要的创建数据接口:CustomerRepository,代码如下:代码示例,CustomerRepository:publicinterfaceCustomerRepositoryextendsRepository
版权声明:本文标题:Spring Boot研究和应用 内容由网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://www.freenas.com.cn/jishu/1705366811h482842.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论