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