摘要:需要弄清楚自己項(xiàng)目的依賴關(guān)系,在中第三方包如何初始化。打包會(huì)把項(xiàng)目和所依賴的包打包成一個(gè)大包,直接運(yùn)行這個(gè)包就可以。依賴包使用下面的配置幫你把所有的依賴包復(fù)制到目錄下,方便我們部署或者是測(cè)試時(shí)復(fù)制依賴包。
現(xiàn)在大家都追趕新的技術(shù)潮流,我來(lái)逆行一下。
其實(shí)Spring Boot 隱藏了大量的細(xì)節(jié),有大量的默認(rèn)配置,其實(shí)通過xml配置的方式也可以達(dá)到和Spring Boot一樣的效果。
Profile在Spring Boot項(xiàng)目中我們通過application.properties中的設(shè)置來(lái)配置使用哪個(gè)配置文件application-dev.properties,application-prod.properties等等
spring.profiles.active=dev
Spring 3.0以后就包含了Profile功能,在xml中可以這么寫,不過所有的bean需要顯式的配置。需要弄清楚自己項(xiàng)目的依賴關(guān)系,在Spring中第三方包如何初始化。
在Spring Boot中大量的Jave Bean都包含了默認(rèn)初始化的功能,只需要配置預(yù)先設(shè)置好的屬性名稱,但是在xml中需要顯式的初始化Bean,并且可以在初始化的時(shí)候用Placeholder來(lái)配置。
Environment在 Spring Boot 項(xiàng)目中application.properties和application-xxx.properties 中的變量會(huì)自動(dòng)放到 Environment中,并且可以通過@Value直接注入到變量中。
如果使用 ClassPathXmlApplicationContext 初始化項(xiàng)目,可以看到源代碼里 Environment 是一個(gè) StandardEnvironment 實(shí)例,僅僅包含系統(tǒng)變量和環(huán)境變量,為了把application-xxx.properties放到 Environment 當(dāng)中我們需要擴(kuò)展一下 ClassPathXmlApplicationContext,下面是CustomApplicationContext和CustomEnvironment
import org.springframework.context.support.ClassPathXmlApplicationContext; import org.springframework.core.env.ConfigurableEnvironment; public class CustomApplicationContext extends ClassPathXmlApplicationContext { public CustomApplicationContext(){ super(); } public CustomApplicationContext(String configLocation) { super(new String[]{configLocation}, true, null); } @Override public ConfigurableEnvironment createEnvironment() { return new CustomEnvironment(); } }
import org.springframework.core.env.MutablePropertySources; import org.springframework.core.env.PropertySource; import org.springframework.core.env.StandardEnvironment; import org.springframework.core.io.DefaultResourceLoader; import org.springframework.core.io.Resource; import org.springframework.core.io.support.ResourcePropertySource; import java.io.IOException; public class CustomEnvironment extends StandardEnvironment { private static final String APPCONFIG_PATH_PATTERN = "classpath:application-%s.properties"; @Override protected void customizePropertySources(MutablePropertySources propertySources) { super.customizePropertySources(propertySources); try { propertySources.addLast(initResourcePropertySourceLocator()); } catch (IOException e) { logger.warn("failed to initialize application config environment", e); } } private PropertySource> initResourcePropertySourceLocator() throws IOException { String profile = System.getProperty("spring.profiles.active", "dev"); String configPath = String.format(APPCONFIG_PATH_PATTERN, profile); System.out.println("Using application config: " + configPath); Resource resource = new DefaultResourceLoader(this.getClass().getClassLoader()). getResource(configPath); PropertySource resourcePropertySource = new ResourcePropertySource(resource); return resourcePropertySource; } }日志配置
Spring Boot 默認(rèn)使用的是logback,在logback-spring.xml 的配置文件中可以使用Spring Profile,而且還有一個(gè)默認(rèn)的CONSOLE Appender
在沒有使用Spring Boot的情況下,不能在logback的config中使用Spring Profile,只能分拆成多個(gè)文件,然后根據(jù)環(huán)境變量讀取不同的配置文件,需要添加依賴org.logback-extensions。
org.logback-extensions logback-ext-spring 0.1.4
logback-dev.xml
${CONSOLE_LOG_PATTERN} utf8
logback-prod.xml
${CONSOLE_LOG_PATTERN} utf8
下面的代碼根據(jù)環(huán)境變量讀取不同的配置文件
private static final String LOGCONFIG_PATH_PATTERN = "classpath:logback-%s.xml"; public static void main(String[] args) throws FileNotFoundException, JoranException { String profile = System.getProperty("spring.profiles.active", "dev"); System.setProperty("file.encoding", "utf-8"); // logback config String logConfigPath = String.format(LOGCONFIG_PATH_PATTERN, profile); System.out.println("Using logback config: " + logConfigPath); LogbackConfigurer.initLogging(logConfigPath); SLF4JBridgeHandler.removeHandlersForRootLogger(); SLF4JBridgeHandler.install(); ConfigurableApplicationContext context = new CustomApplicationContext("classpath:applicationContext.xml"); }測(cè)試
有Spring Boot 的時(shí)候TestCase寫起來(lái)很方便,在類上添加兩行注解即可,在src est esources下的application.properties中設(shè)置spring.profiles.active=test即可指定Profile為test
@RunWith(SpringRunner.class) @SpringBootTest public class TestStockService { @Autowired StockService stockService; @Before public void setUp() { } @After public void tearDown() { } @Test public void testMissingBbTickerEN() { } }
不使用Spring Boot的情況下,需要指定好幾個(gè)配置。
@RunWith(SpringRunner.class) @ContextConfiguration(locations = "classpath:applicationContext.xml") @ActiveProfiles(profiles = "test") @TestPropertySource("classpath:application-test.properties") public class TestStockService { @Autowired StockService stockService; @Before public void setUp() { } @After public void tearDown() { } @Test public void testMissingBbTickerEN() { } }打包
Spring Boot 會(huì)把項(xiàng)目和所依賴的 Jar 包打包成一個(gè)大 Jar 包,直接運(yùn)行這個(gè) Jar 包就可以。這個(gè)功能是通過spring-boot-maven-plugin實(shí)現(xiàn)的。
org.springframework.boot spring-boot-maven-plugin
不使用Spring Boot 之后,我們需要配置maven-jar-plugin,但是依賴包無(wú)法像Spring Boot一樣打包成一個(gè)大的 Jar 包,需要我們指定classpath。
org.apache.maven.plugins maven-jar-plugin 2.6 com.exmaple.demo.DemoApplication true lib/
注意:
當(dāng)用java -jar yourJarExe.jar來(lái)運(yùn)行一個(gè)經(jīng)過打包的應(yīng)用程序的時(shí)候,你會(huì)發(fā)現(xiàn)如何設(shè)置-classpath參數(shù)應(yīng)用程序都找不到相應(yīng)的第三方類,報(bào)ClassNotFound錯(cuò)誤。實(shí)際上這是由于當(dāng)使用-jar參數(shù)運(yùn)行的時(shí)候,java VM會(huì)屏蔽所有的外部classpath,而只以本身yourJarExe.jar的內(nèi)部class作為類的尋找范圍。所以需要在jar包mainfest中添加classpath。
依賴包使用下面的maven配置幫你把所有的依賴包復(fù)制到targetlib目錄下,方便我們部署或者是測(cè)試時(shí)復(fù)制依賴包。
運(yùn)行org.apache.maven.plugins maven-dependency-plugin copy-dependencies prepare-package copy-dependencies target/lib true junit,org.hamcrest,org.mockito,org.powermock,${project.groupId} true true ${project.build.directory}
運(yùn)行時(shí)通過指定命令行參數(shù) -Dspring.profiles.active=prod 來(lái)切換profile
java -jar -Dspring.profiles.active=prod demo.jar總結(jié)
Spring Boot很大程度上方便了我們的開發(fā),但是隱藏了大量的細(xì)節(jié),我們使用xml配置spring可以達(dá)到差不多同樣的效果,但是在結(jié)構(gòu)和配置上更加清晰。
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://specialneedsforspecialkids.com/yun/68406.html
摘要:接下來(lái)我們繼續(xù)看如果達(dá)成包,在加入如下配置然后通過打包,最后通過命令啟動(dòng)這樣,最簡(jiǎn)單的就完成了,但是對(duì)于一個(gè)大型項(xiàng)目,這是遠(yuǎn)遠(yuǎn)不夠的,的詳細(xì)操作可以參照官網(wǎng)。以上實(shí)例只是最簡(jiǎn)單的項(xiàng)目入門實(shí)例,后面會(huì)深入研究。 什么是Spring Boot Spring Boot是由Pivotal團(tuán)隊(duì)提供的基于Spring的全新框架,其設(shè)計(jì)目的是為了簡(jiǎn)化Spring應(yīng)用的搭建和開發(fā)過程。該框架遵循約定大...
摘要:基礎(chǔ)入門篇簡(jiǎn)介可以基于輕松創(chuàng)建可以運(yùn)行的獨(dú)立的生產(chǎn)級(jí)的應(yīng)用程序。對(duì)平臺(tái)和第三方類庫(kù)我們有自己看法和意見約定大于配置。官網(wǎng)目前最新版本是我們接下來(lái)就在這個(gè)版本的基礎(chǔ)上面進(jìn)行學(xué)習(xí)。變成項(xiàng)目引入依賴。 SpringBoot基礎(chǔ)入門篇 簡(jiǎn)介 Spring Boot可以基于Spring輕松創(chuàng)建可以運(yùn)行的、獨(dú)立的、生產(chǎn)級(jí)的應(yīng)用程序。 對(duì)Spring平臺(tái)和第三方類庫(kù)我們有自己看法和意見(約定大于配置...
摘要:在逐步開發(fā)過程中,發(fā)現(xiàn)自己需求,用戶使用,頁(yè)面樣式,做得都不是很好。希望很和牛逼的人合作,一齊完善這個(gè)項(xiàng)目,能讓它變成可以使用的產(chǎn)品。自己也可以在此不斷學(xué)習(xí),不斷累計(jì)新的知識(shí),慢慢變強(qiáng)起來(lái)。 showImg(https://segmentfault.com/img/bVboKz5);#### 這一個(gè)什么項(xiàng)目 ##### 使用技術(shù) Spring MVC Spring Security ...
摘要:第二個(gè)類級(jí)別注解是。將引導(dǎo)應(yīng)用程序,啟動(dòng),從而啟動(dòng)自動(dòng)配置服務(wù)器。比如想使用不同版本的,具體如下在標(biāo)簽中還可以指定編譯的版本和項(xiàng)目的編碼格式指定項(xiàng)目編碼為使用插件可以為項(xiàng)目提供的操作方式,的個(gè),默認(rèn)。 引言 Spring 框架對(duì)于很多 Java 開發(fā)人員來(lái)說都不陌生。Spring 框架包含幾十個(gè)不同的子項(xiàng)目,涵蓋應(yīng)用開發(fā)的不同方面。如此多的子項(xiàng)目和組件,一方面方便了開發(fā)人員的使用,另外...
摘要:需要注意的是必須要使用版本為以上才支持屬性。與格式文件不同,正對(duì)不同的,無(wú)法在一個(gè)文件設(shè)置,官方采用命名形式為格式來(lái)達(dá)成一樣的效果。采用方式添加的是屬于額外激活的,也就是說覆蓋掉外部傳入的指定的。 showImg(https://segmentfault.com/img/remote/1460000019924197?w=1050&h=500); Spring Boot Profile...
閱讀 1614·2021-11-16 11:45
閱讀 2544·2021-09-29 09:48
閱讀 3269·2021-09-07 10:26
閱讀 1840·2021-08-16 10:50
閱讀 1866·2019-08-30 15:44
閱讀 2698·2019-08-28 18:03
閱讀 1898·2019-08-27 10:54
閱讀 1823·2019-08-26 14:01