当前位置: 首页 新闻详细

springboot启动运行特定代码,Springboot如何自动加载数据源

专业互联网培训机构——完成蜕变以后轻松拿高薪

电话+V:159999-78052 ,欢迎咨询本地springboot代码怎么运行啊,[python实用课程],[C++单片机原理],[C#、PHP网站搭建],[Nodejs小程序开发],[ios游戏开发],[安卓游戏开发],[教会用大脑用想法赚钱实现阶层跨越]

一、springboot启动运行特定代码

在SpringBoot中,我们可以通过使用ApplicationRunner或者CommandLineRunner接口来实现在SpringBoot启动时运行特定代码。

一、背景与需求说明

在SpringBoot应用中,有时我们需要在应用启动时运行一些特定的代码,比如进行数据初始化、预加载缓存等操作。为了满足这种需求,SpringBoot提供了两个接口:ApplicationRunner和CommandLineRunner。这两个接口都提供了一个run方法,SpringBoot应用启动后会执行这两个接口中的run方法。

二、使用ApplicationRunner或CommandLineRunner接口

要实现启动时运行特定代码,我们需要实现ApplicationRunner或CommandLineRunner接口,并覆盖其run方法。这两个接口的使用方式类似,一般来说,如果我们的代码需要和应用程序的参数(也就是命令行参数)交互,那么我们可以使用CommandLineRunner。如果我们的代码不需要和应用程序的参数交互,那么我们可以使用ApplicationRunner。以下是一个使用ApplicationRunner的例子:

java

@Component

publicclassMyStartupRunnerimplementsApplicationRunner{

@Override

publicvoidrun(ApplicationArgumentsargs)throwsException{

//在这里编写你的启动时需要执行的代码

System.out.println("ThiscodewillrunwhentheSpringBootstarts.");

}

}

三、使用@PostConstruct注解

除了上面的方式,我们还可以使用@PostConstruct注解来实现启动时运行特定代码。@PostConstruct注解用于在依赖项注入完成后立即执行方法,因此也可以用来在SpringBoot启动时执行特定代码。以下是一个使用@PostConstruct的例子:

java

@Component

publicclassMyStartupBean{

@PostConstruct

publicvoidinit(){

//在这里编写你的启动时需要执行的代码

System.out.println("ThiscodewillrunwhentheSpringBootstarts.");

}

}

二、springboot下载文件到本地目录?

SpringBoot项目引入本地Jar包

1、一,搭建一个本地maven源,仍然通过maven管理。这种方法的缺点是,一旦工程需要多人维护,每人都需要搭一个本地源,比较麻烦,除非公司有公用的内部maven源,否则这种方案反而增加工作量。

2、一般情况下java项目引入第三方的jar包,在项目下新建lib,把jar包放进入,引入即可使用。但是在Springboot的项目,直接进行打包会出现引用的类找不到的情况。

3、解决方法如下:项目下面有pom.xml文件,要在pom文件下添加这个${basedir}的意思是本地路径添加以上代码后即可。还有就是,在别的服务下面的子pom.xml也要添加以上代码,但不同的是,要看好路径。

4、由于SpringBoot内置了tomcat,所以将SpringBoot项目直接打成jar包,可以直接在cmd里面运行。打包选中项目后,打开MavenProjects视图,如下图:然后运行package,将项目重新打包。当日志出现:说明打包成功。

SpringBoot配置文件存放位置以及读取顺序

1、idea中,为了我们本地方便开发测试,我们在此处创建一个config目录,然后把application.properties放进去,项目正常运行。jar包会自动生成在target目录下。

2、SpringBoot系统启动时默认会读取的配置文件,支持properties\yml格式。也就是说,会先加载application.properties,根据spring.profile.active的设置加载相应的application-XX.properties配置,然后按优先级合并配置文件。

3、使用springboot的方式,此种方式jar需要放到前面格式例如以jar包发布springboot项目时,默认会先使用jar包同级目录下的application.properties来作为项目配置文件。

4、application.properties中:server.port=8001,application.yml中:server.port=8888。问题:springboot是否都加载这两个配置文件?如果两个文件有相同的key,取哪一个文件的value?都加载,且按properties→yml的顺序加载。

5、springboot配置文件支持灵活的路径,以及灵活的文件名,用一个变量表达式总结如下:部分源码如下:当满足上述变量表达式的配置文件有多个时,会有一个配置的优先级。

【SpringBoot】MultipartFile存本地文件

SpringBoot将在类路径中或从ServletContext的根目录中提供名为/static(或/public或/resources或/META-INF/resources)的目录中的静态内容。

idea中,为了我们本地方便开发测试,我们在此处创建一个config目录,然后把application.properties放进去,项目正常运行。jar包会自动生成在target目录下。

newFile()中的地址就随便你想放在那里就放在那里,接下来就想办法访问就好了。

springboot日志配置:名称只要是一logback开头就行,测试使用log.xml并不会生成日志。

配置文件SpringBoot使用一个全局的配置文件application.propertiesapplication.yml配置文件的作用:修改SpringBoot自动配置的默认值,SpringBoot在底层都给我们自动配置好。

我们现在在用的SpringCache,可以直接看SpringBoot提供的缓存枚举类,有如下这些:EhCache:一个纯Java的进程内缓存框架,所以也是基于本地缓存的。(注意EhCachex和EhCachex相互不兼容)。

SpringBoot目录结构

选择SpringInitializr填写你的maven项目的groupId和artifact等项目基本信息之后,在依赖中选择Web--Web之后finish。目录结构如下:直接运行DemoApplication.java就可以运行项目了。

先看一下最终的目录结构:这里我们使用了Thymeleaf模板引擎来获得后台传来的数据并解析,使用bootstrap框架显示数据。可以看到,Thymeleaf的用法和jsp还是有点像的。可以直接通过${}的形式来获得attribute中的数据。

例如,imges目录下的demo.jpg在HTML/JSP中访问是的路径就是,因为SpringBoot的缺省工作目录就是src/main/java,当访问资源时,就是src/main/resources,而/static/**被SPRINGBOOT被映射到了classpath:/static下。

默认情况下,springBoot从classpath下一个叫/static(/public,/resources或/META-INF/resources)的文件夹或从ServletContext根目录提供静态内容。

Springboot如何自动加载数据源

原创2020-11-2616:12·攻城狮Bilbo

Springboot应用程序中数据源(Datasource)的加载有两种方式,一是手动创建一个Datasource,二是根据properties或者yml配置文件自动加载Datasource。这里重点关注Springboot是如何自动加载Datasource的。本文Springboot的版本为2.3.5。

spring-boot-autoconfigure

Springboot的自动装配依赖注解EnableAutoConfiguration,关于这个的源码分析后续再说,这里不是重点。简单说就是:如果配置了EnableAutoConfiguration注解,Springboot会扫描项目依赖包下是否包含spring.factories文件,如果包含则加载文件中配置的对应的类,这就是Springboot自己实现的SPI机制,关于SPI机制,以后再说。在Springboot应用程序中的启动类的注解@SpringBootApplication包含了EnableAutoConfiguration注解,所以会扫描依赖查找spring.factories文件。spring-boot-autoconfigure包故名思义就是负责自动配置,在这个包META-INF目录下面可以找到一个spring.factories,文件太长,我截取一部分入下:

spring.factories

本地springboot代码怎么运行啊

配置文件中的类会被加载,这里我们重点关注
DataSourceAutoConfiguration,从名字看出来,它主要负责数据源自动配置。

DataSourceAutoConfiguration

源码比较长,先看下类上的几个注解:

DataSourceAutoConfiguration

@Configuration(proxyBeanMethods=false)

@Configuration这个注解比较常见,标识了这个类可以被扫描,proxyBeanMethods这个属性用来制定这个类中被@Bean注解标注的方法是否使用代理,当为true时,直接从IOC容器之中取得对象,当为如果设置为false,也就是不使用注解,每次调用@Bean标注的方法获取到的对象和IOC容器中的都不一样,是一个新的对象。

@ConditionalOnClass({DataSource.class,EmbeddedDatabaseType.class})

这个注解表示,只有当Datasource,EmbeddedDatabaseType这两个类对应的Bean不存在时才
DataSourceAutoConfiguration会被实例化到容器中。这个类本来就是要做数据源配置的,如果存在上述的两个Bean,那么说明数据源已经存在,不需要配置了。

@ConditionalOnMissingBean(type={"io.r2dbc.spi.ConnectionFactory"})

这个朱标表示,只有不存在
io.r2dbc.spi.ConnectionFactory类型的Bean时这个类才会被实例化到容器中。r2dbc是一种异步的、非阻塞的关系式数据库连接规范。也就是说只有在采用JDBC规范的情况下才会实例化这个配置类。

@EnableConfigurationProperties({DataSourceProperties.class})

这个配置会将properties或者yml中的配置映射到DataSourceProperties中,并将DataSourceProperties实例化为一个Bean。

DataSourceProperties部分源码如下:

DataSourceProperties

@ConfigurationProperties(prefix="spring.datasource")可以将配置文件中前缀为spring.datasource的属性映射到对应的DataSourceProperties属性中。

@Import({DataSourcePoolMetadataProvidersConfiguration.class,DataSourceInitializationConfiguration.class})


DataSourceInitializationConfiguration和
DataSourcePoolMetadataProvidersConfiguration实例化为Bean交给IOC容器管理。

DataSourceAutoConfiguration主要实现了五个功能:1.初始化DataSourceProperties实例

将配置文件属性映射到DataSourceProperties中,这个功能上面已经介绍

2.检测并配置内置数据库,例如H2,DERBY,HSQL等

这个功能具体实现源码如下:

EmbeddedDatabaseConfiguration

@Conditional({
DataSourceAutoConfiguration.EmbeddedDatabaseCondition.class})这个注解比较重要,EmbeddedDatabaseCondition继承了SpringBootCondition,SpringBootCondition是一个模板类,继承它后,只需要实现核心的getMatchOutCome()方法来自定义一个Condition类。当这个类被@Conditional注解引入的时候,最终时候执行这个核心方法来判断是否匹配的。在这里这个注解主要用来判断是否使用内置数据库,如果使用则引入内置数据库配置类
EmbeddedDataSourceConfiguration。

其他几个注解上面已经涉及到,这里就不再赘述。

3.数据源配置

数据源配置相关源码如下:

PooledDataSourceConfiguration

这里的@Conditional({
DataSourceAutoConfiguration.PooledDataSourceCondition.class})注解和上文类似,如果满足1.有spring.datasource.type属性2.
PooledDataSourceAvailableCondition:项目中引入了数据源依赖,这两个条件中的任意一个则按顺序解析@Import({Hikari.class,Tomcat.class,Dbcp2.class,Generic.class,
DataSourceJmxConfiguration.class})中的几个类。例如导入Hikari.class,则会实例化对应的Datasource,即产生一个Datasource类型的Bean。

4.DataSourceInitializationConfiguration配置

主要负责自动运行sql文件

只要在资源路径中添加schema.sql和data.sql文件,springboot在运行的时候就会自动关联数据库创建相应的表和数据。

具体由
DataSourceInitializationConfiguration这个类实现,核心是其中的@Import({
DataSourceInitializerInvoker.class,
DataSourceInitializationConfiguration.Registrar.class})中的
DataSourceInitializerInvoker,这类有一个方法afterPropertiesSet(),源码如下:

DataSourceInitializerInvoker

其中createSchema()方法负责查找并执行schema.sql脚本,initialize(initializer)方法负责查找并执行data.sql脚本。

5.DataSourcePoolMetadataProvidersConfiguration配置

主要用户获取内置数据源状态,这里不再赘述。

以上就是
DataSourceAutoConfiguration配置类的主要功能,它负责了数据源的实例化,最终生成一个Datasource类型的Bean加载到IOC容器中。

【WINDRISES EMPLOYMENT PROGRAMMING】尊享对接老板

电话+V: 159999-78052

机构由一批拥有10年以上开发管理经验,且来自互联网或研究机构的IT精英组成,负责研究、开发教学模式和课程内容。公司具有完善的课程研发体系,一直走在整个行业发展的前端,在行业内竖立起了良好的品质口碑。

本地springboot代码怎么运行啊
发布人:qq40695083 发布时间:2024-10-22