写点什么

SpringBoot 之开发深入(一)

作者:andy
  • 2022-10-27
    北京
  • 本文字数:3061 字

    阅读完需:约 10 分钟

在实际的项目开发之中,尤其是 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、定义抽象父类控制器的子类,进行资源读取的实际应用。


@RestControllerpublic 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。

程序内容:


// 声明为配置项@Configurationpublic 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,故只需要更改名称即可解决。


用户头像

andy

关注

还未添加个人签名 2019-11-21 加入

还未添加个人简介

评论

发布
暂无评论
SpringBoot之开发深入(一)_andy_InfoQ写作社区