应用程序.yaml
app:
type-a:
txn-log-file: data/type-a-txn-info.csv
type-b:
txn-log-file: data/type-b-txn-info.csv
default:
txn-log-file: data/default/txn-info.csv
主应用程序.java
@SpringBootApplication
public class MainApplication {
public static void main(String[] args) {
new SpringApplicationBuilder(MainApplication.class).web(WebApplicationType.NONE).run(args);
}
@Bean
public TransactionManager transactionManager(@Value("${app.default.txn-log-file}") String txnLogFile) {
return new TransactionManagerImpl(txnLogFile);
}
@Bean
public CsvService csvService(String txnLogFile) {
return new CsvServiceImpl(txnLogFile);
}
}
TypeOneRoute.java
@Configuration
public class TypeOneRoute extends RouteBuilder {
@Value("${app.type-a.txn-log-file}")
private String txnLogFile;
@Autowired
private ApplicationContext applicationContext;
private TransactionManager transactionManager;
@Override
public void configure() throws Exception {
transactionManager = applicationContext.getBean(TransactionManager.class, txnLogFile);
transactionManager.someOperation();
}
}
@Configuration
public class TypeTwoRoute extends RouteBuilder {
@Value("${app.type-b.txn-log-file}")
private String txnLogFile;
@Autowired
private ApplicationContext applicationContext;
private TransactionManager transactionManager;
@Override
public void configure() throws Exception {
transactionManager = applicationContext.getBean(TransactionManager.class, txnLogFile);
transactionManager.create();
}
}
事务管理器.java
@Service
@Scope(value = ConfigurableBeanFactory.SCOPE_PROTOTYPE)
public interface TransactionManager {
public ZonedDateTime create() throws IOException, ParseException;
}
事务管理器impl.java
public class TransactionManagerImpl implements TransactionManager {
@Autowired
private ApplicationContext applicationContext;
private String txnLogFile;
public TransactionManagerImpl(String txnLogFile) {
this.txnLogFile = txnLogFile;
}
private CsvService csvService;
@PostConstruct
public void init() {
csvService = applicationContext.getBean(CsvService.class, txnLogFile);
}
public ZonedDateTime create() throws IOException, ParseException {
try {
csvService.createTxnInfoFile();
return csvService.getLastSuccessfulTxnTimestamp();
} catch (IOException e) {
throw new IOException("Exception occured in getTxnStartDate()", e);
}
}
}
最初,TransactionManager Bean将注册到
app.default.txn-info.csv
ApplicationContext
我用传递来获取bean的参数替换该值