Как вы используете Spring Boot Configuration Processor с Gradle? - PullRequest
0 голосов
/ 25 июня 2019

Итак, у нас есть наша конфигурация часового в файле с именем sentryconfig.properties

dsn=https://blahblahblah@sentry.io/1234567
stacktrace.app.packages=ch.cypherk.myapp
async.shutdowntimeout=5000

(не sentry.properties, потому что мы не хотим включать автоматическую настройку Sentry, поэтому мы можем отключить ее на-производственные профили).

Это означает, что нам нужно инициализировать Sentry самостоятельно ...

Это работает, как задумано:

@Configuration
@PropertySource("classpath:sentryconfig.properties")
@Profile("prod")
public class SentryConfiguration {
    private static final Logger LOG = LoggerFactory.getLogger(SentryConfiguration.class);
    private final VersionInfo versionInfo;

    private final String dsn;
    private final String stacktrace_app_packages;
    private final int async_shutdowntimeout;

    public SentryConfiguration(
        VersionInfo versionInfo,
        @Value("${dsn}") String dsn,
        @Value("${stacktrace.app.packages}") String stacktrace_app_packages,
        @Value("${async.shutdowntimeout}") int async_shutdowntimeout
    ) {
        this.versionInfo = versionInfo;
        this.dsn = dsn;
        this.stacktrace_app_packages = stacktrace_app_packages;
        this.async_shutdowntimeout = async_shutdowntimeout;
    }

    @PostConstruct
    public void initSentry() {
        String sentryUrl = String.format("%s?stacktrace.app.packages=%s&async.shutdowntimeout=%d",
            dsn, stacktrace_app_packages, async_shutdowntimeout
        );

        LOG.info("Initializing Sentry: " + sentryUrl);
        Sentry.init(sentryUrl);
        SentryClient client = Sentry.getStoredClient();
        client.setRelease(versionInfo.getVersion());
    }
}

Но руководитель группы слышал о @ConfigurationProperties и хочет, чтобы я его использовал.

Эти Я еще не совсем понял.

Я прочитал это и что и процесс кажется относительно простым, на самом деле:

Мы добавляем sentry. -прификс к нашим свойствам (поскольку @ConfigurationProperties требует непустой префикс)

sentry.dsn=https://blahblahblah@sentry.io/1234567
sentry.stacktrace.app.packages=ch.cypherk.myapp
sentry.async.shutdowntimeout=5000

А затем добавьте

implementation("org.springframework.boot:spring-boot-configuration-processor")

в наш build.gradle файл.

(я также попытался использовать annotationProcessor вместо implementation, как предложено здесь , но это ничего не изменило)

и, наконец, удалите свойства из конструктора и добавьте аннотации @ConfigurationProperties и @EnableConfigurationProperties):

@Configuration
@EnableConfigurationProperties
@PropertySource("classpath:sentryconfig.properties")
@ConfigurationProperties("sentry")
@Profile("prod")
public class SentryConfiguration {
    private static final Logger LOG = LoggerFactory.getLogger(SentryConfiguration.class);
    private final VersionInfo versionInfo;

    private String dsn;
    private String stacktrace_app_packages;
    private int async_shutdowntimeout;

    public SentryConfiguration(
        VersionInfo versionInfo
    ) {
        this.versionInfo = versionInfo;
    }

    @PostConstruct
    public void initSentry() {
        String sentryUrl = String.format("%s?stacktrace.app.packages=%s&async.shutdowntimeout=%d",
            dsn, stacktrace_app_packages, async_shutdowntimeout
        );

        LOG.info("Initializing Sentry: " + sentryUrl);
        Sentry.init(sentryUrl);
        SentryClient client = Sentry.getStoredClient();
        client.setRelease(versionInfo.getVersion());
    }
}

Затем пересоберите проект, запустите и ...

io.sentry.SentryClientFactory: Error creating valid DSN from: 'null?stacktrace.app.packages=null&async.shutdowntimeout=0'

Хорошо, поэтому я был готов изменить имена stacktrace_app_packages и async_shutdowntimeout, если Spring неЯ не ожидал, что dsn также будет нулевым.

Я получаю уведомление IntelliJ о том, что

Перезапустите SpringПроцессор аннотации конфигурации загрузки для обновления сгенерированных метаданных

Я ожидал, что это произойдет, когда я перестрою проект.

Это не так.

Как мне заставить это работать?

...