-
Notifications
You must be signed in to change notification settings - Fork 0
/
BeanProducer.java
61 lines (53 loc) · 2.81 KB
/
BeanProducer.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
package com.github.rahmnathan.localmovie.config;
import com.github.rahmnathan.directory.monitor.DirectoryMonitor;
import com.github.rahmnathan.directory.monitor.DirectoryMonitorObserver;
import com.github.rahmnathan.localmovie.web.filter.CorrelationIdFilter;
import com.github.rahmnathan.omdb.boundary.MediaProvider;
import com.github.rahmnathan.omdb.boundary.MediaProviderOmdb;
import com.github.rahmnathan.omdb.boundary.MediaProviderStub;
import io.micrometer.core.instrument.MeterRegistry;
import lombok.AllArgsConstructor;
import org.apache.camel.CamelContext;
import org.apache.camel.ProducerTemplate;
import org.springframework.boot.actuate.autoconfigure.metrics.MetricsProperties;
import org.springframework.boot.actuate.metrics.data.MetricsRepositoryMethodInvocationListener;
import org.springframework.boot.actuate.metrics.data.RepositoryTagsProvider;
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
import org.springframework.boot.web.servlet.FilterRegistrationBean;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Lazy;
import java.util.Set;
@Configuration
@AllArgsConstructor
public class BeanProducer {
private final ServiceConfig serviceConfig;
@Bean
@ConditionalOnProperty(name = "service.directoryMonitor.enabled", havingValue = "true")
public DirectoryMonitor buildDirectoryMonitor(Set<DirectoryMonitorObserver> observers) {
return new DirectoryMonitor(serviceConfig.getMediaPaths(), observers);
}
@Bean
public FilterRegistrationBean<CorrelationIdFilter> loggingFilter(){
FilterRegistrationBean<CorrelationIdFilter> registrationBean = new FilterRegistrationBean<>();
registrationBean.setFilter(new CorrelationIdFilter());
registrationBean.addUrlPatterns("/localmovies/*");
return registrationBean;
}
@Bean
public MediaProvider createMovieProvider(CamelContext context, ProducerTemplate template){
if(serviceConfig.getOmdb().isEnabled()) {
context.setUseMDCLogging(true);
return new MediaProviderOmdb(context, template, serviceConfig.getOmdb().getApiKey());
}
return new MediaProviderStub();
}
// Attempt to fix metrics bug https://github.com/spring-projects/spring-boot/issues/26630
@Bean
public static MetricsRepositoryMethodInvocationListener metricsRepositoryMethodInvocationListener(
MetricsProperties metricsProperties, @Lazy MeterRegistry registry, RepositoryTagsProvider tagsProvider) {
MetricsProperties.Data.Repository properties = metricsProperties.getData().getRepository();
return new MetricsRepositoryMethodInvocationListener(registry, tagsProvider, properties.getMetricName(),
properties.getAutotime());
}
}