Spring Boot - служба электромонтажа с конструктором String

Решение находится в ссылке, которую вы предоставили в своем вопросе:

datetime.combine(date.today(), time()) + timedelta(hours=1)

Полный пример:

from datetime import date, datetime, time, timedelta

dt = datetime.combine(date.today(), time(23, 55)) + timedelta(minutes=30)
print dt.time()

Выход:

00:25:00

0
задан Jigar Naik 20 March 2019 в 10:32
поделиться

2 ответа

Есть ли какие-то особые требования, когда вы хотите использовать аннотацию @Service? если нет, то вы можете использовать @Bean для создания компонента для TransactionManagerImpl, как показано ниже.

@Configuration
public class Config {

@Value("${txnLogFile}")
private String txnLogFile;

@Bean
public TransactionManager transactionManager() {
    return new TransactionManagerImpl(txnLogFile);
 }

}

и удалите аннотацию @Service из TransactionManagerImpl.

0
ответ дан Raghvendra Garg 20 March 2019 в 10:32
поделиться

Наконец, я сделал это, как показано ниже, теперь я уверен, что это лучший способ. Я не хотел иметь три реализации только из-за одной переменной.

application.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

MainApplication.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();

    }
}

TypeTwoRoute.java

@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();

    }
}

TransactionManager.java

@Service
@Scope(value = ConfigurableBeanFactory.SCOPE_PROTOTYPE)
public interface TransactionManager {

    public ZonedDateTime create() throws IOException, ParseException;

}

TransactionManagerImpl.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 будет зарегистрирован в app.default.txn-info.csv, и когда я получу его из ApplicationContext, я заменяю значение переданным параметром чтобы получить бин из ApplicationContext

0
ответ дан Jigar Naik 20 March 2019 в 10:32
поделиться
Другие вопросы по тегам:

Похожие вопросы: