我有一个要向 InfluxDB 报告的 bean。数据库在表中INFLUX_DB_SERVER注册了 InfluxDB。如果你看代码你会发现 MethodreportMemory做了很多工作,它构造了一个 Measurement 并做了 call reportAll,当没有 InfluxDB 时所有这些工作都是无用的。
因此,如果没有 InfluxDB,我们的想法是跳过这项工作。由于 public-void-methods 不返回值,因此它对周围的应用程序没有影响。
我能做的是我可以编写一个方法isWorkPossible并在每次调用时调用该方法。这可能遵循 KISS,但违反了 DRY。所以我喜欢使用 AOP 来归档它。
但如果没有注册 InfluxDB,我喜欢跳过所有 public void 方法的执行。
/**
* The reporter to notify {@link InfluxDB influxDBs} for changes.
*/
@Named
public class InfluxDBReporter {
/**
* Logger for reporting. For security reasons neither the username nor the
* password should be logged above {@link Level#FINER}.
*/
private static final Logger LOG = Logger.getLogger(InfluxDBReporter.class.getCanonicalName());
/**
* The entitymanager to use, never <code>null</code>.
*/
@PersistenceContext
private final EntityManager entityManager = null;
/**
* The registred {@link InfluxDBServer} in key and the URL in value.
*/
@SkipPublicVoidMethodsIfEmpty
private final Map<InfluxDB, URL> dbs = new LinkedHashMap<>();
/**
* Initializes the connections.
*/
@PostConstruct
private void connect() {
for (InfluxDBServer db : FROM(囗InfluxDBServer.class).all(entityManager)) {
try {
URL dbUrl = new URL(db.getUrl());
InfluxDB idb = InfluxDBFactory.connect(db.getUrl(), db.getUsername(), db.getPassword());
idb.setDatabase(db.getDatabaseName());
dbs.put(idb, dbUrl);
} catch (MalformedURLException e) {
LOG.log(Level.SEVERE, db.getUrl(), e);
}
}
}
我希望System.out.println在实例化 bean 时运行,但它没有。
知道为什么吗?
12345678_0001
相关分类