spring - स्प्रिंग बूट में सभी डेटाबेस संबंधित ऑटो कॉन्फ़िगरेशन को अक्षम करें




hibernate spring-boot (5)

जिस तरह से मैं इसी तरह की बात करेंगे:

@Configuration
@EnableAutoConfiguration(exclude = {DataSourceAutoConfiguration.class, DataSourceTransactionManagerAutoConfiguration.class, HibernateJpaAutoConfiguration.class})
@Profile ("client_app_profile_name")
public class ClientAppConfiguration {
    //it can be left blank
}

सर्वर ऐप के लिए एक समान लिखें (बिना बाहर रखे)।

अंतिम चरण मुख्य स्प्रिंग बूट क्लास से ऑटो कॉन्फ़िगरेशन को अक्षम करना है:

@SpringBootApplication
public class SomeApplication extends SpringBootServletInitializer {

    public static void main(String[] args) {
        SpringApplication.run(SomeApplication.class);
    }

    protected SpringApplicationBuilder configure(SpringApplicationBuilder application) {
        return application.sources(SomeApplication.class);
    }
}

परिवर्तित करें: @SpringBootApplication में:

@Configuration 
@ComponentScan

यह काम करना चाहिए। अब, उदाहरण में मैंने जिन आश्रितों को बाहर रखा है वे अधूरे हो सकते हैं। वे मेरे लिए पर्याप्त थे, लेकिन यह निश्चित नहीं था कि यदि डेटाबेस से संबंधित पुस्तकालयों को पूरी तरह से अक्षम कर दिया जाए। सुनिश्चित करने के लिए नीचे दी गई सूची देखें:

http://docs.spring.io/spring-boot/docs/current-SNAPSHOT/reference/htmlsingle/#auto-configuration-classes

उम्मीद है की वो मदद करदे

मैं दो एप्लिकेशन विकसित करने के लिए स्प्रिंग बूट का उपयोग कर रहा हूं, एक सर्वर के रूप में कार्य करता है और अन्य एक क्लाइंट ऐप है। हालांकि, दोनों एक ही ऐप हैं जो सक्रिय प्रोफ़ाइल के आधार पर अलग-अलग कार्य करते हैं। मैं अपने एप्लिकेशन को कॉन्फ़िगर करने के लिए स्प्रिंग बूट के ऑटो कॉन्फ़िगरेशन सुविधा का उपयोग कर रहा हूं।

मैं क्लाइंट ऐप पर सभी डेटाबेस से संबंधित ऑटो कॉन्फ़िगरेशन को अक्षम करना चाहता हूं, क्योंकि इसके लिए डेटाबेस कनेक्शन की आवश्यकता नहीं होगी। एप्लिकेशन को डेटाबेस के साथ संबंध स्थापित करने का प्रयास नहीं करना चाहिए, न ही किसी स्प्रिंग डेटा या हाइबरनेट सुविधाओं का उपयोग करने का प्रयास करना चाहिए। डेटाबेस ऑटो कॉन्फ़िगरेशन को सक्षम या अक्षम करना सशर्त और ऐप के सक्रिय प्रोफ़ाइल पर आधारित होना चाहिए।

क्या मैं संबंधित प्रोफाइल के लिए दो अलग-अलग एप्लिकेशन.प्राय फाइल तैयार करके इसे प्राप्त कर सकता हूं?

मैंने इसे अपने गुण फ़ाइल में जोड़ने का प्रयास किया,

spring.autoconfigure.exclude=org.springframework.boot.autoconfigure.orm.jpa.HibernateJpaAutoConfiguration\
  org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration\
org.springframework.boot.autoconfigure.jdbc.DataSourceTransactionManagerAutoConfiguration\
  org.springframework.boot.autoconfigure.data.web.SpringDataWebAutoConfiguration

लेकिन, एप्लिकेशन अभी भी शुरू में डेटाबेस से कनेक्ट करने का प्रयास करता है। क्या मेरी आवश्यकता को प्राप्त करने के लिए वे बहिष्करण पर्याप्त हैं?


प्रोफाइल के माध्यम से इसे नियंत्रित करने का एक और तरीका यह है:

// note: no @SpringApplication annotation here
@Import(DatabaseConfig.class)
public class Application {

    public static void main(String[] args) {
        SpringApplication.run(Application.class, args);
    }
}

@Configuration
@Import({DatabaseConfig.WithDB.class, DatabaseConfig.WithoutDB.class})
public class DatabaseConfig {

    @Profile("!db")
    @EnableAutoConfiguration(
            exclude = {DataSourceAutoConfiguration.class,   DataSourceTransactionManagerAutoConfiguration.class,
                HibernateJpaAutoConfiguration.class})
    static class WithoutDB {

    }

    @Profile("db")
    @EnableAutoConfiguration
    static class WithDB {

    }
}

मेरे लिए रास्ता जोड़ना था

@EnableAutoConfiguration(exclude = {DataSourceAutoConfiguration.class, DataSourceTransactionManagerAutoConfiguration.class, HibernateJpaAutoConfiguration.class})

स्प्रिंग रनिंग क्लास के लिए एनोटेशन (`@SpringBootApplication के साथ चिह्नित)।

अंत में, ऐसा दिखता है:

@SpringBootApplication
@EnableAutoConfiguration(exclude = {DataSourceAutoConfiguration.class, DataSourceTransactionManagerAutoConfiguration.class, HibernateJpaAutoConfiguration.class})
public class Application{

    public static void main(String[] args) {
        SpringApplication.run(Application.class, args);
    }
 }

लगता है कि आप कक्षाओं को अलग करने के लिए अल्पविराम को भूल गए। तो आपके विन्यास के आधार पर निम्नलिखित कार्य करेगा:

spring.autoconfigure.exclude=org.springframework.boot.autoconfigure.orm.jpa.HibernateJpaAutoConfiguration,\
    org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration,\
    org.springframework.boot.autoconfigure.jdbc.DataSourceTransactionManagerAutoConfiguration,\
    org.springframework.boot.autoconfigure.data.web.SpringDataWebAutoConfiguration

वैकल्पिक रूप से आप इसे निम्नानुसार भी परिभाषित कर सकते हैं:

spring.autoconfigure.exclude[0]=org.springframework.boot.autoconfigure.orm.jpa.HibernateJpaAutoConfiguration
spring.autoconfigure.exclude[1]=org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration
spring.autoconfigure.exclude[2]=org.springframework.boot.autoconfigure.jdbc.DataSourceTransactionManagerAutoConfiguration
spring.autoconfigure.exclude[3]=org.springframework.boot.autoconfigure.data.web.SpringDataWebAutoConfiguration

@SpringBootApplication एनोटेशन का उपयोग करके विशिष्ट ऑटो-कॉन्फ़िगरेशन कक्षाओं को बाहर करने का एक तरीका है।

@Import(MyPersistenceConfiguration.class)
@SpringBootApplication(exclude = {
        DataSourceAutoConfiguration.class, 
        DataSourceTransactionManagerAutoConfiguration.class,
        HibernateJpaAutoConfiguration.class})
public class MySpringBootApplication {         
    public static void main(String[] args) {
        SpringApplication.run(MySpringBootApplication.class, args);
    }
}

@SpringBootApplication#exclude विशेषता @EnableAutoConfiguration#exclude विशेषता के लिए एक उपनाम है और मुझे यह उपयोगी और उपयोगी लगता है।
मैंने उदाहरण के लिए @Import(MyPersistenceConfiguration.class) को यह प्रदर्शित करने के लिए जोड़ा कि आप अपने कस्टम डेटाबेस कॉन्फ़िगरेशन को कैसे लागू कर सकते हैं।





spring-data-jpa