我有几个xlapp = win32com.client.DispatchEx("Excel.Application")
wb = xlapp.Workbooks.Open(<path_to_excel_workbook>)
wb.RefreshAll()
xlapp.CalculateUntilAsyncQueriesDone()
xlapp.DisplayAlerts = False
wb.Save()
xlapp.Quit()
文件,这些文件用于不同的配置文件,并且每个文件都包含一个属性,每个属性都具有特定的值。我想在查询数据库中使用此属性作为参数。
是否可以使用SpEL或其他方式添加它?
例如application-x.properties
:
application.properties
可能的用法:
query.parameters.role: ADMIN
答案 0 :(得分:5)
您可以通过以下方式实现:
1。-使用Repository Query Keywords
按角色查找所有用户@Repository
public interface UserRepository extends JpaRepository<User, UUID> {
Set<User> findByRole(String role);
}
2.-在getAllUsers
中创建一个名为UserService
的方法,并使用@Value获取role value
:
@Service
public class UserService {
@Autowired
private UserRepository repository;
@Value("${query.parameters.role}")
private String role;
public Set<User> getAllUsers() {
return repository.findByRole(role);
}
}
回答此问题的另一种方法是实施SpEL
支持的自定义@Query
,您可以查看一下SpEL support in Spring Data JPA
然后,针对您的情况,请按照以下步骤操作:
1.-创建一个ConfigProperties
类,以便您可以阅读并获取application.properties
。
@Configuration
@PropertySource("classpath:application.properties")
@ConfigurationProperties(prefix = "query")
public class ConfigProperties {
private Parameters parameters;
// standard getters and setters
}
public class Parameters {
private String role;
// standard getters and setters
}
2.-实现自定义EvaluationContextExtensionSupport
并引用ConfigProperties
public class PropertyEvaluationContextExtension extends EvaluationContextExtensionSupport {
private final ConfigProperties configProperties;
public PropertyEvaluationContextExtension(final ConfigProperties configProperties) {
this.configProperties= configProperties;
}
@Override
public String getExtensionId() {
return "properties";
}
@Override
public ConfigProperties getRootObject() {
return this.configProperties;
}
}
3.-创建一个bean以便被称为您的自定义PropertyEvaluationContextExtension
@Configuration
public class CustomConfig {
private final ConfigProperties configProperties;
public CustomConfig(final ConfigProperties configProperties) {
this.configProperties= configProperties;
}
@Bean
EvaluationContextExtensionSupport propertyExtension() {
return new PropertyEvaluationContextExtension(configProperties);
}
}
4.-通过以下格式调用query.parameters.role
:?#{query.parameters.role}
@Query(value = "SELECT u FROM User u WHERE u.role = ?#{query.parameters.role}")
Set<User> getAllUsers();