Program Tip

Grails 2.0에서 Grails 구성에 액세스하는 방법은 무엇입니까?

programtip 2020. 11. 22. 20:27
반응형

Grails 2.0에서 Grails 구성에 액세스하는 방법은 무엇입니까?


최신 Grails 2.0 마일스톤을 획득했으며 ConfigurationHolder클래스에 대한 사용 중단 경고가 표시됩니다 .

org.codehaus.groovy.grails.commons.ConfigurationHolder

deprecation 메시지는 "대신 의존성 주입을 사용하십시오"라는 메시지로 나에게별로 도움이되지 않습니다. 의존성 주입을 이해하지만 런타임에 액세스 할 수 있도록 적절한 Grails 구성으로 Bean을 연결하려면 어떻게해야합니까? 컨트롤러 및 태그 (예 :)가 아닌 다른 위치에서 구성에 액세스해야합니다 BootStrap.


  • 의존성 주입을 지원하는 아티팩트에 필요한 경우 간단히 주입하십시오. grailsApplication

    class MyController {
        def grailsApplication
    
        def myAction = {
            def bar = grailsApplication.config.my.property
        }
    }
    
  • 당신은 말, 콩,에 필요한 경우 src/groovy또는 src/java사용하여, 최대 와이어를conf/spring/resources.groovy

    // src/groovy/com/example/MyBean.groovy
    class MyBean {
        def grailsApplication
    
        def foo() {
            def bar = grailsApplication.config.my.property
        }
    }
    
    // resources.groovy
    beans = {
        myBean(com.example.MyBean) {
            grailsApplication = ref('grailsApplication')
            // or use 'autowire'
        }
    }
    
  • 다른 곳에서는 구성 개체를 필요한 클래스에 전달하거나 필요한 특정 속성을 전달하는 것이 가장 쉽습니다.

    // src/groovy/com/example/NotABean.groovy
    class NotABean {
        def foo(def bar) {
           ...
        }
    }
    
    // called from a DI-supporting artifact
    class MyController {
        def grailsApplication
        def myAction = {
            def f = new NotABean()
            f.foo(grailsApplication.config.my.property)
        }
    }
    

최신 정보:

Burt Beckwith는 최근 이것에 대한 몇 개의 블로그 게시물을 썼습니다. 하나는 getDomainClass() 도메인 클래스 내에서 사용 하는 방법에 대해 설명 하고 다른 하나는 자체 홀더 클래스만드는 옵션을 제공합니다 (위의 솔루션 중 어느 것도 적절하지 않은 경우).


grailsApplication의 대안은 Holders 클래스입니다.

import grails.util.Holders

def config = Holders.config

홀더에서 직접 구성을 가져 오며 주입이 필요하지 않으므로 유틸리티 클래스 등에 적합합니다.


"grailsApplication"을 소스 파일에 삽입 할 수 있습니다. 다음은 샘플 conf / Bootstrap.groovy입니다.

class BootStrap {

    def grailsApplication

    def init = { servletContext ->
        println grailsApplication.config
    }

    def destroy = {
    }
}

더 이상 사용되지 않는 구성을 가져 오는 또 다른 방법은 다음과 같습니다.

    ApplicationContext context = ServletContextHolder.servletContext.
        getAttribute(GrailsApplicationAttributes.APPLICATION_CONTEXT) 
        as ApplicationContext
    ConfigObject config = context.getBean(GrailsApplication).config

This works in situations where there is no injected parent available, such as servlet classes or static methods.


You can access grails configuration

  1. In Controller

    class DemoController {
        def grailsApplication
    
        def demoAction = {
            def obj = grailsApplication.config.propertyInConfig
        }
    }
    
  2. In services :

    class DemoService {
        def grailsApplication
    
        def demoMethod = {
            def obj = grailsApplication.config.propertyInConfig
        }
    }
    
  3. In taglib :

    class DemoTaglib {
        def grailsApplication
    
        static namespace = "cd"
    
        def demoMethod = {
    
            def obj = grailsApplication.config.propertyInConfig
    
            out << obj    
        }
    }
    

You can call this method of taglib in view as <cd:demoMethod/>

  1. In view :

     <html>
         <head><title>Demo</title></head>
     <body>
         ${grailsApplication.config.propertyInConfig}
     </body>
    
     </html>
    

To access from domain class do:

import grails.util.Holders

// more code

static void foo() {
  def configOption = Holders.config.myProperty
}

참고URL : https://stackoverflow.com/questions/7133580/how-to-access-grails-configuration-in-grails-2-0

반응형