Welcome to OStack Knowledge Sharing Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
174 views
in Technique[技术] by (71.8m points)

Spring boot get @value within a class extending a dependency

Folks, am trying to access config properties from within a class that I've extended from a dependency. Apparently the config class is returning a null pointer in my implementation class (CustomUtil).

pom.xml

    ...
    <dependency>
        <groupId>com.utilapp</groupId>    //3rd party library that I need to use
        <artifactId>util-lib</artifactId>
    </dependency>
    ...

The BaseUtil is from the dependency. CustomUtil is a bean in my SpringBoot App & am overriding the method as below to check the key from the config property ignoreKeyList .

package com.myapp
...

@Component
public class CustomUtil extends BaseUtil {
    @Autowired
    private ClientConfig clientConfig;    // This returns null!

    @Override
    protected boolean shouldExcludeFromList(String key) {
        return this.clientConfig.getIgnoreKeyList.contains(key);    // their library/util excludes certain keywords from the content being formatted
    }
}

Config class in my SpringBoot App.

package com.myapp
...

@Configuration
@Getter
@Setter
public class ClientConfig {
    @Value("${myapp.ignorekeys}")
    private List<String> ignoreKeyList;

    ...
    ...
}

Main class in my app.

package com.myapp
...

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

Service implementation class in my SpringBoot App.

package com.myapp
import com.utilapp.formatters.FormatBuilder;
import com.utilapp.formatters.TextFormatter;
...

@Service
public class ServiceImpl implements MyService {
    @Autowired
    private ClientConfig clientConfig;    // works here!

    public String formatContent(String content) {
        TextFormatter formatter = this.getTextFormatter();
        return formatter.parseAndFormat(content);
    }

    private TextFormatter getTextFormatter() {
        return FormatBuilder.custom()    // FormatBuilder is from the dependency
            .withApplication(this.clientConfig.getAppName())    // In their library, the BaseUtil gets instantiated which am extending in my CustomUtil bean
            ...
            ...
            .withIndentSupport(Boolean.TRUE)
            .build();
    }
}

Controller in my app

package com.myapp
...

@RestController
@RequestMapping("/app/v1")
public class StyleController {
    @Autowired
    private MyService myService;

    @GetMapping("/format")
    public String formatContent(@RequestParam String content) {
        return this.myService.formatContent(content);
    }
}

When I debug ClientConfig, it loads the properties from the config file; application.properties in srcmain esources. But for some reason the ClientConfig is returning null from within the CustomUtil bean. Not sure why! I originally thought it was due to ordering of bean instantiation. I tried playing around with @Order, @DependsOn, @ComponentScan, @ScanBasePackages etc, but none yields.

Any pointers/guidance please. Thanks.

question from:https://stackoverflow.com/questions/65927453/spring-boot-get-value-within-a-class-extending-a-dependency

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Answer

0 votes
by (71.8m points)
Waitting for answers

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome to OStack Knowledge Sharing Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

...