从零开始从Spring迁移到SpringBoot这些点别忘记了知识铺

在本文中,将了解如何将现有的SpringFramework应用程序迁移到SpringBoot应用程序。

SpringBoot不是为了取代Spring,而是为了更快更容易地使用Spring。因此,迁移应用程序所需的大多数更改都与配置有关。

使用SpringBoot进行开发带来了几个优点:

更简单的依赖管理

默认自动装配

嵌入式Web服务器独立运行

应用程序指标和健康检查

高级外部化配置

2.SpringBootStarters极速开始项

首先,需要一组新的依赖项。SpringBoot提供了极速开始依赖项,这些依赖项可以为某些功能引入所有必需的技术。

这些优点是不再需要为每个依赖项指定版本,而是让极速开始项预置了依赖。

最快的入门方法是添加spring-boot-starter-parent到pom.xml:

org.springframework.bootspring-boot-starter-parent1.5.6.RELEASE

spring-boot-starter-parent负责依赖管理。

3.启动入口

使用SpringBoot构建的每个应用程序都需要定义主入口点。这通常是带有main方法的Java类,使用@SpringBootApplication注解:

@SpringBootApplicationpublicclassApplication{publicstaticvoidmain(String[]args){SpringApplication.run(Application.class,args);}}

该@SpringBootApplication注解包含以下注解:

@EnableAutoConfiguration-告诉框架自动根据类路径的依赖关系添加bean

@ComponentScan-扫描与Application类或更低版本相同的包中的其他配置和bean

默认情况下,@SpringBootApplication注解会自动扫描同一个包或下级本中的所有类。因此,方便的包结构可能如下所示:

如果应用程序是创建ApplicationContext的非Web应用程序,则可以删除此代码并替换为上面的@SpringBootApplication类。

可能遇到的问题有多个配置类冲突。为避免这种情况,可以过滤扫描的类:

@SpringBootAppliaction@ComponentScan(excludeFilters={@ComponentScan.Filter(type=FilterType.REGEX,pattern="com.baeldung.config.*")})publicclassApplication{//...}

4.导入配置和组件

SpringBoot在很大程度上依赖于配置注解,但仍然可以以注解和XML格式导入现有配置。

要获取现有的@Configuration或组件类,有两种选择:

将现有类移动到与主Application类包相同或下级的包

显示导入类

要显式导入类,可以在主类上使用@ComponentScan或@Import注解:

@ComponentScan(basePackages="com.baeldung.config")@Import(UserRepository.class)publicclassApplication{//...}

官方文档建议在XML配置上使用注解。但是,如果已经有XML文件,不希望转换为Java配置,仍然可以使用@ImportResource导入它们:

@ImportResource("applicationContext.xml")publicclassApplication{//...}

5.迁移应用程序资源

默认情况下,SpringBoot会在以下位置之一中查找资源文件:

/resources

/public

/static

/META-INF/resources

要迁移,可以将所有资源文件移动到其中一个位置,或者可以通过设置spring.resources.static-locations属性来自定义资源位置:

spring.resources.static-locations=classpath:/images/,classpath:/jsp/

6.迁移应用程序属性

该框架将自动加载在其中一个位置放置的名为application.properties或application.yml的文件中定义的任何属性:

当前目录的a/config子目录

当前目录

类路径上的a/config目录

类路径根

为避免显式加载属性,可以将它们移动到其中一个位置具有此名称的文件。例如,进入应该出现在类路径上的/resources文件夹中。

还可以从名为application-{profile}.properties的文件中自动加载特定环境的配置文件的属性。

此外,大量预定义属性名称可用于配置不同的应用程序行为。

在应用程序中使用的每个Spring框架模块都需要稍作修改,主要与配置有关。来看看一些最常用的功能。

7.迁移SpringWeb应用程序

SpringBoot为Web应用程序提供了一个启动器,它将引入所有必需的依赖项。这意味着可以从Spring框架中删除所有特定于Web的依赖项,并将其替换为spring-boot-starter-web:

org.springframework.bootspring-boot-starter-web

由于SpringBoot尝试根据类路径尽可能自动配置应用程序,因此添加此依赖项将导致将@EnableWebMvc注解添加到主Application类,以及设置DispatcherServlet。

如果有一个设置DispatcherServlet的WebApplicationInitializer类,则不再需要它,@EnableWebMvc注解也不再需要。

如果有一个自定义行为,可以定义的bean,在这种情况下,将使用的bean。

如果在@Configuration类上显式使用@EnableWebMvc注解,则将不再启用MVC自动配置。

添加Web启动程序还会确定以下Bean的自动配置:

支持从类路径上名为/static,/public,/resources或/META-INF/resources的目录提供静态内容

HttpMessageConverter用于常见用例,如JSON和XML

处理所有错误的/error映射

就渲染网页而言,官方文档建议不要使用JSP文件模板引擎。使用以下模板引擎包含自动配置:Thymeleaf,Groovy,FreeMarker,Mustache。需要做的就是使用其中一个添加特定的starter:

<>org.springframework.bootspring-boot-starter-thymeleaf<>

模板文件应放在/resources/templates文件夹中。

如果想继续使用JSP文件,需要配置应用程序以便它可以解析JSP。例如,如果的文件位于/webapp/WEB-INF/views中,那么需要设置以下属性:

spring.mvc.view.prefix=/WEB-INF/views/spring.mvc.view.suffix=.jsp

7.3。嵌入式Web服务器:spring-boot-starter-tomcat

此外,还可以使用嵌入式Tomcat服务器运行的应用程序,该服务器将通过添加spring-boot-starter-tomcat依赖项在端口8080上自动配置:

<>org.springframework.bootspring-boot-starter-tomcat<>

SpringBoot提供自动配置的其他Web服务器是Jetty和Undertow。

8.迁移SpringSecurity应用程序

启用SpringSecurity的启动器是spring-boot-starter-security:

<>org.springframework.bootspring-boot-starter-security<>

默认情况下,这将创建一个名为“user”的用户,在启动期间记录随机生成的密码,并使用基本身份验证保护所有节点。但是,通常希望添加与默认配置不同的安全配置。

出于这个原因,将使用@EnableWebSecurity注解现有的类,它扩展了WebSecurityConfigurerAdapter并定义了一个自定义配置:

@Configuration@EnableWebSecuritypublicclassSecurityConfigextendsWebSecurityConfigurerAdapter{//...}

9.迁移Spring数据应用程序

根据使用的SpringData实现,需要添加相应的启动器。例如,对于JPA,可以添加spring-boot-starter-data-jpa依赖项:

<>org.springframework.bootspring-boot-starter-data-jpa<>

如果要使用内存数据库,请为H2,Derby和HSQLDB类型的数据库添加相应的依赖关系启用自动配置。

例如,要使用H2内存数据库,所需要的只是h2依赖:

<>com.h2databaseh2<>

如果想使用不同的数据库类型和配置,例如MySQL数据库,那么需要依赖关系以及定义配置。

为此,可以保留DataSourcebean定义或使用预定义的属性:

spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driverspring.datasource.url=jdbc:mysql://localhost:3306/testcreateDatabaseIfNotExist=truespring.datasource.username=rootspring.datasource.password=test

SpringBoot会自动将Hibernate配置为默认的JPA提供程序,以及transactionManager。

THE END
1.Servlet程序的入口点是?()borterServlet程序的入口点是?( ) Servlet程序的入口点是?( ) A.init() B、main() C、service() D、doGet() 解答:Chttps://www.cnblogs.com/borter/p/9592768.html
1.Tomcat(6)什么是Servlet容器?查找Servlet:Servlet容器根据/hello这个URL模式在web.xml中查找对应的Servlet。 实例化Servlet:如果Servlet尚未实例化,容器将创建一个HelloWorldServlet的实例。 调用init()方法:如果Servlet是第一次被请求,容器会调用init()方法进行初始化。 调用service()方法:容器调用doGet()方法处理请求,生成响应内容。 https://blog.csdn.net/qq_43012298/article/details/139148062
2.生命周期简介:Servlet接口中一共是5个方法,其中有三个是生命周期方法。? void init(ServletConfig):这个方法会在Servlet被创建后,马上被调用。只会被调用一次!我们可以把一些初始化工作放到这个方法中,如果没有什么初始化工作要做,那么这个方法就空着就可以了。? Servlet有两个时间点会被创建:一是在第一次被请求时,会被...http://yjs.ceden.cn/index.php?article/1638118
3.sessionid怎么获取前端需要吗mob64ca14137e4f的技术博客什么是servlet? 目录 什么是servlet? 一·那么该如何实现一个servlet程序呢? 二.web里的ServletContext 核心:servlet其实就是用来处理请求和响应的工具 是一种实现动态web的java程序 一·那么该如何实现一个servlet程序呢? 1.编写一个java类实现一个HttpServlet类 ...https://blog.51cto.com/u_16213697/12570463
4.Servlet程序的入口点是()Servlet程序的入口点是( ) A.Init() B.main() C.service() D.doGet() 点击查看答案进入小程序搜题 你可能喜欢 仪容的修饰美不需要依据场合规则塑造得体的个人形象。() A. 对 B. 错 点击查看答案进入小程序搜题 β1受体主要分布于心脏。( ) A.对 B.错 点击查看答案进入小程序搜题 无论如何,...https://m.ppkao.com/wangke/daan/3624dbf15ac1423da82e7d50e75cb68d
5.Servlet程序的入口点是:()Servlet程序的入口点是()。 答案解析 (单选题) C#的Windows应用程序的入口点是()。 答案解析 (单选题) 在部署带有Servlet的javaWeb程序时,()不是必须的。? 答案解析 (简答题) 请你编写一个最简单的servlet程序,该程序在网页输出一个字符串“Thisisaservletprogram!!” 答案解析 (单选题) 在JavaEE中,Servle...https://www.examk.com/p/1694877510.html
6.jsp选择题总结(精选5篇)9、Servlet程序的入口点是:(A) A、init()B、main()C、service()D、doGet() 10、不能在不同用户之间共享数据的方法是(A) A、通过cookie B、利用文件系统 C、利用数据库 D、通过ServletContext对象 A5.编写Servlet 的doPost方法时,需要抛出异常为()。(只选一项)A.ServletException,IOException B.ServletExcepti...https://www.360wenmi.com/f/fileacsn0pk3.html
7.2018年3月计算机二级考试WEB提分习题答案(1)15、Servlet程序的入口点是:(A) A、init() B、main() C、service() D、doGet() 16、不能在不同用户之间共享数据的方法是(A) A、通过cookie B、利用文件系统 C、利用数据库 D、通过ServletContext对象 17、page指令通过(A)属性指定当前页面的内容类型和字符集? https://jsj.liuxue86.com/a/3667938.html
8.2020年计算机二级Web考试每日一练(6月1日)5、Servlet程序的入口点是:(A) A、init() B、main() C、service() D、doGet() 以上就是考必过为大家整理的2020年计算机二级Web考试每日一练(6月1日)的具体内容。没有特别幸运,那么请先特别努力,别因为懒惰而失败,还矫情地将原因归于自己倒霉。你必须特别努力,才能显得毫不费力。最后,考必过预祝大家在未...https://m.kaobiguo.net/news/237111.html
9.金三银四跳槽季,为了年后offer,我竟然撸完了这50场1000多道面经...程序: 1.实现优先队列 2.设计2D游戏功能 输入两个角色位置 输出射击转向角 3.环形buffer设计 提问: 1.二叉树与堆的关系 2.B+树 3.时间复杂度 4.内积点乘叉乘 5.CAS机制 6.重载 重写和多态 字节跳动二面12.28 1.内积点乘叉乘 2.堆 3. 排序 各种数据结构 ...https://maimai.cn/article/detail?fid=1589559958&efid=HMnVzUsEaNASGCiWLCQB4Q
10.构建用户管理微服务应用程序将具有模块化设计,以便能够为各种场景提供单独的部署工件(例如,针对 Google App Engine 的 2.5 servlet 兼容 WAR 和其他用例的基于 Spring Boot 的自包含可执行 JAR) 实体标识符以数据库无关的方式生成,也就是说,不会使用数据库特定机制(AUTO_INCREMENT 或序列)来获取下一个 ID 值。解决方案将类似于 In...https://www.jianshu.com/p/f59cd83207ef
11.2016计算机二级web程序设计强化练习(含答案)15、Servlet程序的入口点是:(A) A、init() B、main() C、service() D、doGet() 16、不能在不同用户之间共享数据的方法是(A) A、通过cookie B、利用文件系统 C、利用数据库 D、通过ServletContext对象 17、page指令通过(A)属性指定当前页面的内容类型和字符集? https://www.oh100.com/kaoshi/ncre2/tiku/262091.html
12.程序不包含适用于入口点的静态"Main"方法您好!您的问题是关于程序中不包含适用于入口点的静态 "Main" 方法。这个问题可能是由于程序缺少一个适当的入口点而导致的。 在编程中,每个程序都需要一个入口点,即程序开始执行的地方。通常,这个入口点是一个名为 "Main" 的静态方法。这个方法通常包含程序的主要逻辑,并在程序启动时自动调用。 如果您的程序...https://cloud.tencent.com/developer/information/%E7%A8%8B%E5%BA%8F%E4%B8%8D%E5%8C%85%E5%90%AB%E9%80%82%E7%94%A8%E4%BA%8E%E5%85%A5%E5%8F%A3%E7%82%B9%E7%9A%84%E9%9D%99%E6%80%81%22Main%22%E6%96%B9%E6%B3%95
13.@ServletComponentScan组件扫描标识注解@ServletComponentScan常常在主应用程序入口启动类中,发现该注解身影,她的作用可大了:开启组件注解扫描功能+标识在那里扫描 一、springboot中的注解的理解 注解所在的位置,无非有几个:类,方法与属性上,由于位置的限定,注定不会很长 归纳本人对注解的理解: ...http://www.leanboot.com/53.htm
14.SpringBoot监控Redis某个Key变化SpringBoot怎样监控Redis中某个...public class DemoController { @RequestMapping("/fun") public void fun(){ System.out.println("fun"); } } 第四步:在程序执行入口类上面添加注解 @ServletComponentScan 部署项目,运行查看效果: 以上为个人经验,希望能给大家一个参考,也希望大家多多支持。https://www.qb5200.com/article/405369.html
15.SpringBoot如何监控Redis中某个Key的变化(自定义监听器)public class DemoController { @RequestMapping("/fun") public void fun(){ System.out.println("fun"); } } 第四步:在程序执行入口类上面添加注解 @ServletComponentScan 部署项目,运行查看效果: 以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。https://m.jb51.net/article/222909.htm
16.如何读懂代码–学时网读懂程序代码,使心法皆为我所用。 摸清架构,便可轻松掌握全貌。 优质工具在手,读懂程序非难事。 望文生义,进而推敲组件的作用。 找到程序入口,再由上而下抽丝剥茧。 阅读的乐趣,透过程序认识作者。 读懂程序,使心法皆为我所用 程序是别人写的,只有原作者才真的了解程序的用途及涵义。许多程员心里都有一种不...http://www.xuetimes.com/archives/2108