国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

如何把Spring Boot 項(xiàng)目變成一個(gè)XML配置的Spring項(xiàng)目

eechen / 3077人閱讀

摘要:需要弄清楚自己項(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.propertiesapplication-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,下面是CustomApplicationContextCustomEnvironment

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ù)制依賴包。


    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)行

運(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

相關(guān)文章

  • SpringBoot簡(jiǎn)單入門

    摘要:接下來(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ā)過程。該框架遵循約定大...

    BWrong 評(píng)論0 收藏0
  • SpringBoot基礎(chǔ)入門篇

    摘要:基礎(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ù)我們有自己看法和意見(約定大于配置...

    Edison 評(píng)論0 收藏0
  • Spring MVC+Stomp+Security+H2 Jetty

    摘要:在逐步開發(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 ...

    gitmilk 評(píng)論0 收藏0
  • Spring Boot (一)helloworld

    摘要:第二個(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ā)人員的使用,另外...

    go4it 評(píng)論0 收藏0
  • 一文掌握 Spring Boot Profiles

    摘要:需要注意的是必須要使用版本為以上才支持屬性。與格式文件不同,正對(duì)不同的,無(wú)法在一個(gè)文件設(shè)置,官方采用命名形式為格式來(lái)達(dá)成一樣的效果。采用方式添加的是屬于額外激活的,也就是說覆蓋掉外部傳入的指定的。 showImg(https://segmentfault.com/img/remote/1460000019924197?w=1050&h=500); Spring Boot Profile...

    Eidesen 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<