Spring Boot是一個(gè)輕量級(jí)框架,可以用來輕松地創(chuàng)建獨(dú)立的、生產(chǎn)級(jí)的、基于Spring且能直接運(yùn)行的應(yīng)用。其設(shè)計(jì)目的是用來簡(jiǎn)化新 Spring 應(yīng)用的初始搭建以及開發(fā)過程。那springboot怎么改域名?下面來我們就來給大家講解一下。
1.idea打包springboot的項(xiàng)目的方式有很多,這里我們使用maven進(jìn)行打包開發(fā),
注意:不要忘記本地安裝maven呦
mvn clean package
2.打包完成之后就是上傳到服務(wù)器,這有很多的上傳工具M(jìn)obaXterm filezilla,上傳之前要仔細(xì)檢查一些數(shù)據(jù)庫(kù)配置還要其他的配置。不然還要從新上傳。
nohup java -jar 項(xiàng)目名稱 &(這樣可以讓項(xiàng)目一直在后臺(tái)運(yùn)行)
敲重點(diǎn):ps -ef | grep java 查看進(jìn)程
3.項(xiàng)目運(yùn)行起來之后,你要把域名做解析,這個(gè)很好解析。上圖
4.這樣我們就可以 域名+port 訪問項(xiàng)目,但是沒見上線的哪家網(wǎng)站是這樣的。所以我們要做一個(gè)域名的反向代理,nginx作為中間轉(zhuǎn)發(fā)的中間件
5.下載nginx。一種是源碼安裝,一種是yum安裝。介紹最簡(jiǎn)單的yum安裝
yum install nginx
6.執(zhí)行命令 vi /etc/nginx/nginx.conf 編輯 Nginx 的配置文件,將默認(rèn)的server {...} 配置修改為以下內(nèi)容:
第二個(gè)箭頭寫域名,第三個(gè)是代理的本地ip
Spring Boot數(shù)據(jù)源配置原理是什么?
我們知道,Spring Boot 中幾乎所有的默認(rèn)配置都是通過配置類 XxxAutoConfiguration 進(jìn)行配置的,Spring Boot 數(shù)據(jù)源也不例外,它的自動(dòng)配置類是:DataSourceAutoConfiguration。
DataSourceAutoConfiguration 中共包括以下 5 個(gè)內(nèi)部靜態(tài)類:
· EmbeddedDatabaseCondition
· PooledDataSourceAvailableCondition
· PooledDataSourceCondition
· PooledDataSourceConfiguration(池化數(shù)據(jù)源自動(dòng)配置類)
· EmbeddedDatabaseConfiguration(內(nèi)嵌數(shù)據(jù)源自動(dòng)配置類)
其中,PooledDataSourceConfiguration 和 EmbeddedDatabaseConfiguration 為使用了 @Configuration 注解的自動(dòng)配置類,其余 3 個(gè)為限制條件類。
EmbeddedDatabaseConfiguration
顧名思義,EmbeddedDatabaseConfiguration 是內(nèi)嵌數(shù)據(jù)源的自動(dòng)配置類,該類中并沒有任何的方法實(shí)現(xiàn),它的主要功能都是通過 @import 注解引入 EmbeddedDataSourceConfiguration 類來實(shí)現(xiàn)的。
@import({EmbeddedDataSourceConfiguration.class})
EmbeddedDataSourceConfiguration 向容器中添加了一個(gè) Spring Boot 內(nèi)嵌的數(shù)據(jù)源,該數(shù)據(jù)源支持 HSQL,H2 和 DERBY 三種數(shù)據(jù)庫(kù),其部分代碼如下。
@Configuration( proxyBeanMethods = false ) @EnableConfigurationProperties( { DataSourceProperties.class }) public class EmbeddedDataSourceConfiguration implements BeanClassLoaderAware { private ClassLoader classLoader; public EmbeddedDataSourceConfiguration() {} public void setBeanClassLoader(ClassLoader classLoader) { this.classLoader = classLoader; } //向容器中添加 Spring Boot 內(nèi)嵌的數(shù)據(jù)源 @Bean( destroyMethod = "shutdown" ) public EmbeddedDatabase dataSource(DataSourceProperties properties) { return (new EmbeddedDatabaseBuilder()) .setType(EmbeddedDatabaseConnection.get(this.classLoader) .getType()) .setName(properties.determineDatabaseName()) .build(); } }
通過上面的分析,我們知道自動(dòng)配置類 EmbeddedDatabaseConfiguration 的作用是向容器中添加一個(gè)內(nèi)嵌的數(shù)據(jù)源(DataSource),但這是有條件限制的。
在 EmbeddedDatabaseConfiguration 類上還使用一個(gè) @Conditional 注解,該注解使用了 DataSourceAutoConfiguration 的內(nèi)部限制條件類 EmbeddedDatabaseCondition 來進(jìn)行條件判斷。
@Conditional({DataSourceAutoConfiguration.EmbeddedDatabaseCondition.class})
EmbeddedDatabaseCondition 主要用來檢測(cè)容器中是否已經(jīng)存在池化數(shù)據(jù)源(PooledDataSource)。若容器中存在池化數(shù)據(jù)源時(shí),則 EmbeddedDatabaseConfiguration 不能被實(shí)例化。只有當(dāng)容器中不存在池化數(shù)據(jù)源時(shí),EmbeddedDatabaseConfiguration 才能被實(shí)例化,才能向容器中添加內(nèi)嵌數(shù)據(jù)源(EmbeddedDataSource)。
PooledDataSourceConfiguration
PooledDataSourceConfiguration 是池化數(shù)據(jù)源的自動(dòng)配置類,該類上使用了一個(gè) @Conditional 注解,該注解使用了 DataSourceAutoConfiguration 的內(nèi)部限制條件類 PooledDataSourceCondition 來進(jìn)行條件判斷。
@Conditional({DataSourceAutoConfiguration.PooledDataSourceCondition.class})
PooledDataSourceCondition 與 EmbeddedDatabaseCondition 一樣,也是用來檢測(cè)容器中是否已經(jīng)存在池化數(shù)據(jù)源的,但不同的是,PooledDataSourceConfiguration 是只有當(dāng)容器中存在池化數(shù)據(jù)源時(shí), 才可以被實(shí)例化,才可以向容器中添加池化數(shù)據(jù)源。
與 EmbeddedDatabaseConfiguration 一樣,PooledDataSourceConfiguration 類中也沒有任何的方法實(shí)現(xiàn),它的所有功能都是通過 @import 注解引入其他的類實(shí)現(xiàn)的。
@import({Hikari.class, Tomcat.class, Dbcp2.class, OracleUcp.class, Generic.class, DataSourceJmxConfiguration.class})
PooledDataSourceConfiguration 通過 @import 注解引入了 Hikari、Tomcat、Dbcp2、OracleUcp 和 Generic 五個(gè)數(shù)據(jù)源配置類,它們都是 DataSourceConfiguration 的內(nèi)部類,且它們的功能類似,都是向容器中添加指定的數(shù)據(jù)源。
下面我們以 Hikari 為例進(jìn)行分析,Hikari 的源碼如下。
@Configuration( proxyBeanMethods = false ) @ConditionalOnClass( { HikariDataSource.class }) @ConditionalOnMissingBean( { DataSource.class }) @ConditionalOnProperty( name = { "spring.datasource.type" } , havingValue = "com.zaxxer.hikari.HikariDataSource" , matchIfMissing = true ) static class Hikari { Hikari() {} @Bean @ConfigurationProperties( prefix = "spring.datasource.hikari" ) HikariDataSource dataSource(DataSourceProperties properties) { HikariDataSource dataSource = (HikariDataSource) DataSourceConfiguration.createDataSource(properties, HikariDataSource.class); if (StringUtils.hasText(properties.getName())) { dataSource.setPoolName(properties.getName()); } return dataSource; } }
在 Hikari 類中,主要使用以下注解:
· @Configuration:表示當(dāng)前類是一個(gè)配置類;
· @ConditionalOnMissingBean({DataSource.class}):表示容器中沒有用戶自定義的數(shù)據(jù)源時(shí),該配置類才會(huì)被實(shí)例化;
· @ConditionalOnClass({HikariDataSource.class}) :表示必須在類路徑中存在 HikariDataSource 類時(shí),Hikari 才會(huì)實(shí)例化。而 HikariDataSource 類是由 spring- boot-starter-jdbc 默認(rèn)將其引入的,因此只要我們?cè)? pom.xml 中引入了該 starter, Hikari 就會(huì)被實(shí)例化(這也是 Spring Boot 2.x 默認(rèn)使用 HikariCP 作為其數(shù)據(jù)源的原因)。;
· @ConditionalOnProperty( name = {"spring.datasource.type"},havingValue = "com.zaxxer.hikari.HikariDataSource",matchIfMissing = true): 表示當(dāng) Spring Boot 配置文件中,配置了 spring.datasource.type = com.zaxxer.hikari.HikariDataSource(明確指定使用 Hikari 數(shù)據(jù)源)或者不配置 spring.datasource.type(即默認(rèn)情況)時(shí),Hikari 才會(huì)被實(shí)例化。
Hikari 類通過 @Bean 注解向容器中添加了 HikariDataSource 組件,該組件的實(shí)例對(duì)象是通過調(diào)用 DataSourceConfiguration 的 createDataSource() 方法得到的,代碼如下。
@Bean @ConfigurationProperties( prefix = "spring.datasource.hikari" ) HikariDataSource dataSource(DataSourceProperties properties) { HikariDataSource dataSource = (HikariDataSource) DataSourceConfiguration.createDataSource(properties, HikariDataSource.class); if (StringUtils.hasText(properties.getName())) { dataSource.setPoolName(properties.getName()); } return dataSource; }
在 createDataSource() 方法中,調(diào)用 DataSourceProperties 的 initializeDataSourceBuilder() 來初始化 DataSourceBuilder,源碼如下。
protected static < T > T createDataSource(DataSourceProperties properties, Class < ? extends DataSource > type) { return properties.initializeDataSourceBuilder() .type(type) .build(); }
initializeDataSourceBuilder() 方法通過調(diào)用 DataSourceBuilder 的 create() 方法創(chuàng)建 DataSourceBuilder 對(duì)象,并根據(jù) Spring Boot 的配置文件(application.properties/yml)中的配置,依次設(shè)置數(shù)據(jù)源類型、驅(qū)動(dòng)類名、連接 url、 用戶名和密碼等信息。
public DataSourceBuilder < ? > initializeDataSourceBuilder() { return DataSourceBuilder.create(this.getClassLoader()) .type(this.getType()) . driverClassName(this.determineDriverClassName()) .url(this.determineUrl()) .username(this.determineUsername()) .password(this.determinePassword()); }
上面提到 spring.datasource.type 默認(rèn)是可以不用配置的,因此在 createDataSource() 方法在獲取到回傳回來的 DataSourceBuilder 對(duì)象后,還需要將其 type 屬性再次設(shè)置為 HikariDataSource,并調(diào)用 DataSourceBuilder 的 build() 方法,完成 HikariDataSource 的初始化。
dataSource() 方法獲得數(shù)據(jù)源對(duì)象,并設(shè)置了連接池的名字(name),注入到容器中。
這樣我們就完成了對(duì) Spring Boot 數(shù)據(jù)源自動(dòng)配置原理的分析,總之pring Boot最大的好處就是簡(jiǎn)單、快捷、方便,所以掌握好 Spring Boot相關(guān)操作很有必要!最后大家如果想要了解更多java架構(gòu)師知識(shí),敬請(qǐng)關(guān)注賦能網(wǎng)。
本文鏈接:
本文章“pringboot怎么改域名?Spring Boot數(shù)據(jù)源配置原理是什么?”已幫助 92 人
免責(zé)聲明:本信息由用戶發(fā)布,本站不承擔(dān)本信息引起的任何交易及知識(shí)產(chǎn)權(quán)侵權(quán)的法律責(zé)任!
本文由賦能網(wǎng) 整理發(fā)布。了解更多培訓(xùn)機(jī)構(gòu)》培訓(xùn)課程》學(xué)習(xí)資訊》課程優(yōu)惠》課程開班》學(xué)校地址等機(jī)構(gòu)信息,可以留下您的聯(lián)系方式,讓課程老師跟你詳細(xì)解答:
咨詢熱線:4008-569-579