在实际的项目开发之中,尤其是 MVC 设计模式的企业级项目,所有的项目都需要满足以下条件:
访问的端口不能是 8080,应该使用默认的 80 端口
为了进行数据的维护,建议建立一系列的 properties 配置文件,例如:提示消息、跳转路径;
所有的控制器都采用 Rest 风格输出,但是,信息的输出应该交由页面完成,页面不再仅仅是 JSP,SpringBoot 里见不到 JSP 了;
在项目进行打包的时候应该考虑到不同的 profile 配置。
一、改变环境属性
SpringBoot 项目的启动发现,默认情况下,WEB 容器为 tomcat,使用的是 8080 端口。
[ restartedMain] o.s.b.d.a.OptionalLiveReloadServer : LiveReload server is running on port 35729
[ restartedMain] o.s.j.e.a.AnnotationMBeanExporter : Registering beans for JMX exposure on startup
[ restartedMain] o.s.b.w.embedded.tomcat.TomcatWebServer : Tomcat started on port(s): 8080 (http) with context path ''
[ restartedMain] org.fuys.ownsbb.SpringBootApp : Started SpringBootApp in 11.597 seconds (JVM running for 13.629)
复制代码
从实际开发来看,web 项目是不能单独运行在 8080 端口之上的,而是运行在 80 端口之上,因此,要修改默认环境,需要编写与之对应的配置文件,并写在 classpath 路径上。
在 classpath 路径下,新建 src/main/resource 源目录,在该目录下创建一个 application.properties(文件名称不能改变,SpringBoot 只认这个名称)。
在 springboot 项目上修改配置文件,建议安装插件,使用插件进行文件修改,这样可以获取提示信息。修改默认端口:server.port = 80,结果如下:
[ restartedMain] o.s.b.w.embedded.tomcat.TomcatWebServer : Tomcat started on port(s): 80 (http) with context path ''
复制代码
如有需要,也可配置 contextpath 信息,但是实际开发不会这么做,修改内容为:
server.context-path=/fuys
访问路径前加上前缀:http://localhost/fuys
SpringBoot、SpringCloud 里面使用了两类配置文件:application.properties、application.yml。
YAML(Yet Another Markup Language,仍然是一种标记语言)文件,一种结构化的数据文件,apache storm 开发组件上进行配置的时候使用的就是这类文件。使用 yml 文件,需要注意的是,对于配置的值,需要与名称分隔开,系统是无法自动使用“:”进行分隔的,强烈建议加上空格。
配置举例如下:
server:
port: 8080
context-path: /fuys
当 application.properties 和 application.yml 同时存在时,如果两个配置项发生冲突,以 properties 文件为主,如果没有冲突,则以存在内容为主。
SpringBoot 默认容器为 tomcat,实际上根据需要,用户会使用 jetty 容器。jetty 相对于 tomcat 而言,容量小许多,activeMQ 就运行于 jetty 之上。集成环境一般会使用 jetty。那么,想要使用 jetty,只需要追加依赖即可。
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-jetty</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<exclusions>
<exclusion>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-tomcat</artifactId>
</exclusion>
</exclusions>
</dependency>
复制代码
重新启动项目,容器使用 jetty。
[ restartedMain] o.s.b.web.embedded.jetty.JettyWebServer : Jetty started on port(s) 80 (http/1.1) with context path '/'
复制代码
项目以微服务架构方式进行打包时,建议使用 jetty 服务器发布项目。
二、读取资源文件
在实际的项目开发之中,资源文件不可或缺。尤其是提示文字信息需要在资源文件中定义,并且国际化技术也需要使用资源文件。要想在 SpringBoot 里面进行资源文件的配置只需要做一些简单的配置即可,所有注入到资源文件中的信息都可以使用 spring 原有提供的 MessageSource 进行读取。
1、创建资源文件 message.properties
welcome.msg=welcome {0} !
复制代码
2、修改 application.yml 文件
spring:
message:
basename: message
复制代码
3、执行完以上配置之后,为用户创建 MessageSource 对象,用户在使用时直接注入使用即可。
为了能够达到 MVC 开发标准,创建一个抽象的父类控制器:AbstractController,而后在此抽象类中进行资源读取的配置。这样的方式也就是为模板设计模式。
public abstract class AbstractController {
@Resource
private MessageSource messageSource;
public String getValue(String key,String ...args){
return messageSource.getMessage(key, args, Locale.getDefault());
}
}
复制代码
4、定义抽象父类控制器的子类,进行资源读取的实际应用。
@RestController
public class MessageController extends AbstractController {
@RequestMapping(value = "/msg",method=RequestMethod.GET)
public String msg(String mid){
return super.getValue("welcome.msg", mid);
}
}
复制代码
三、Bean 配置
在使用 Spring 进行开发配置的时候有两类选择:*.xml 配置文件、配置的 Bean(@configure)。在 SpringBoot 的开发世界里面,为了继续“零配置”特点,提供了一种简单的支持。也就是说,需要真的有需要通过 xml 文件编写配置,但是又不想配置文件,这时可以使用 Bean 的方式来进行类的配置。
提醒:配置的 Bean 一定要在启动主类所在包的子包下,这样才能实现自动扫描注入功能。
1、原有设置接口,并注入方式在此省略,但是,后续部分以此为基础进行讲解。
2、接下来使用 Bean 配置,同时将原有 @service 定义接口的实现去掉,表明无法自动注入成功。随后定义一个配置程序类:org.fuys.ownsbb.config.ServiceConfig。
程序内容:
// 声明为配置项
@Configuration
public class ServiceConfig {
// 返回一个spring配置的bean,与xml的<bean>等价
@Bean
public IMessageService getMessageService(){
return new MessageServiceImpl();
}
}
复制代码
3、SSM 或者 SSH 开发框架而言,出现较早,现在迁移到 SpringBoot 中,现在有一个非常完善的 xml 配置文件出现,还需要将所有信息转换为 bean 配置吗?这样显然非常麻烦,为了解决这样的问题,SpringBoot 支持配置文件的读取。
定义一个简单的 xml 文件:
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd">
<bean id="messageService" class="org.fuys.ownsbb.service.impl.MessageServiceImpl"/>
</beans>
复制代码
修改 SpringBoot 启动主类。
@SpringBootApplication
@ImportResource(locations={"classpath:application.xml"})
public class SpringBootApp {
public static void main(String[] args) throws Exception {
SpringApplication.run(SpringBootApp.class, args);
}
}
复制代码
启动之后报出错误:
java.lang.IllegalStateException: Failed to load property source from location 'classpath:/application.xml'
Caused by: java.util.InvalidPropertiesFormatException: org.xml.sax.SAXParseException; lineNumber: 14; columnNumber: 68; 文档根元素 "beans" 必须匹配 DOCTYPE 根 "null"。
Caused by: org.xml.sax.SAXParseException: 文档根元素 "beans" 必须匹配 DOCTYPE 根 "null"。
复制代码
以上原因在于配置文件名称不能为 application,故只需要更改名称即可解决。
评论