Как вы используете Spring Boot Configuration Processor с Gradle?

Итак, мы имеем нашу конфигурацию часового в файле с именем 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 если весна не поднимет подчеркивания, но я не ожидал dsn быть нулевым тоже.

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

Перезапустите обработчик аннотаций конфигурации Spring Boot, чтобы обновить сгенерированные метаданные

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

Кажется, это не так.

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

0 ответов

Другие вопросы по тегам