Skip to content

Commit f3eb6a3

Browse files
authored
refactor: 优化对实体事件的支持 (#335)
* refactor: 优化对实体事件的支持 * refactor: 优化 * refactor(基础模块): 优化JdbcReactiveExecutor事务 * refactor: 优化
1 parent a2c7eeb commit f3eb6a3

23 files changed

+957
-630
lines changed

hsweb-commons/hsweb-commons-crud/src/main/java/org/hswebframework/web/crud/configuration/JdbcSqlExecutorConfiguration.java

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -20,14 +20,14 @@
2020
public class JdbcSqlExecutorConfiguration {
2121
@Bean
2222
@ConditionalOnMissingBean
23-
public SyncSqlExecutor syncSqlExecutor() {
24-
return new DefaultJdbcExecutor();
23+
public SyncSqlExecutor syncSqlExecutor(DataSource dataSource) {
24+
return new DefaultJdbcExecutor(dataSource);
2525
}
2626

2727
@Bean
2828
@ConditionalOnMissingBean
29-
public ReactiveSqlExecutor reactiveSqlExecutor() {
30-
return new DefaultJdbcReactiveExecutor();
29+
public ReactiveSqlExecutor reactiveSqlExecutor(DataSource dataSource) {
30+
return new DefaultJdbcReactiveExecutor(dataSource);
3131
}
3232

3333
}

hsweb-commons/hsweb-commons-crud/src/main/java/org/hswebframework/web/crud/events/EntityEventListener.java

Lines changed: 423 additions & 242 deletions
Large diffs are not rendered by default.

hsweb-commons/hsweb-commons-crud/src/main/java/org/hswebframework/web/crud/events/ValidateEventListener.java

Lines changed: 14 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -34,21 +34,22 @@ public void onEvent(EventType type, EventContext context) {
3434

3535
if (resultHolder.isPresent()) {
3636
resultHolder
37-
.ifPresent(holder -> holder
38-
.invoke(LocaleUtils
39-
.doInReactive(() -> {
40-
tryValidate(type, context);
41-
return null;
42-
})
43-
));
37+
.ifPresent(holder -> holder
38+
.invoke(LocaleUtils
39+
.doInReactive(() -> {
40+
tryValidate(type, context);
41+
return null;
42+
})
43+
));
4444
} else {
4545
tryValidate(type, context);
4646
}
4747
}
4848

4949
@SuppressWarnings("all")
5050
public void tryValidate(EventType type, EventContext context) {
51-
if (type == MappingEventTypes.insert_before || type == MappingEventTypes.save_before) {
51+
if (type == MappingEventTypes.insert_before
52+
|| type == MappingEventTypes.save_before) {
5253

5354
boolean single = context.get(MappingContextKeys.type).map("single"::equals).orElse(false);
5455
if (single) {
@@ -60,10 +61,11 @@ public void tryValidate(EventType type, EventContext context) {
6061
context.get(MappingContextKeys.instance)
6162
.filter(List.class::isInstance)
6263
.map(List.class::cast)
63-
.ifPresent(lst -> lst.stream()
64-
.filter(Entity.class::isInstance)
65-
.map(Entity.class::cast)
66-
.forEach(e -> ((Entity) e).tryValidate(CreateGroup.class))
64+
.ifPresent(lst -> lst
65+
.stream()
66+
.filter(Entity.class::isInstance)
67+
.map(Entity.class::cast)
68+
.forEach(e -> ((Entity) e).tryValidate(CreateGroup.class))
6769
);
6870
}
6971

hsweb-commons/hsweb-commons-crud/src/main/java/org/hswebframework/web/crud/service/CrudService.java

Lines changed: 27 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
package org.hswebframework.web.crud.service;
22

3+
import lombok.SneakyThrows;
34
import org.apache.commons.collections4.CollectionUtils;
45
import org.hswebframework.ezorm.core.param.QueryParam;
56
import org.hswebframework.ezorm.rdb.mapping.SyncDelete;
@@ -12,6 +13,7 @@
1213
import org.hswebframework.web.api.crud.entity.TransactionManagers;
1314
import org.springframework.transaction.annotation.Transactional;
1415

16+
import java.sql.SQLException;
1517
import java.util.Collection;
1618
import java.util.Collections;
1719
import java.util.List;
@@ -32,13 +34,15 @@ default SyncDelete createDelete() {
3234
return getRepository().createDelete();
3335
}
3436

35-
@Transactional(readOnly = true, transactionManager = TransactionManagers.jdbcTransactionManager)
37+
@Transactional( readOnly = true, transactionManager = TransactionManagers.jdbcTransactionManager)
38+
@SneakyThrows
3639
default Optional<E> findById(K id) {
3740
return getRepository()
3841
.findById(id);
3942
}
4043

4144
@Transactional(readOnly = true, transactionManager = TransactionManagers.jdbcTransactionManager)
45+
@SneakyThrows
4246
default List<E> findById(Collection<K> id) {
4347
if (CollectionUtils.isEmpty(id)) {
4448
return Collections.emptyList();
@@ -48,70 +52,78 @@ default List<E> findById(Collection<K> id) {
4852
.findById(id);
4953
}
5054

51-
@Transactional(transactionManager = TransactionManagers.jdbcTransactionManager)
55+
@Transactional(rollbackFor = Throwable.class,transactionManager = TransactionManagers.jdbcTransactionManager)
56+
@SneakyThrows
5257
default SaveResult save(Collection<E> entityArr) {
5358
return getRepository()
5459
.save(entityArr);
5560
}
5661

57-
@Transactional(transactionManager = TransactionManagers.jdbcTransactionManager)
62+
@Transactional(rollbackFor = Throwable.class,transactionManager = TransactionManagers.jdbcTransactionManager)
63+
@SneakyThrows
5864
default int insert(Collection<E> entityArr) {
5965
return getRepository()
6066
.insertBatch(entityArr);
6167
}
6268

63-
@Transactional(transactionManager = TransactionManagers.jdbcTransactionManager)
64-
default void insert(E entityArr) {
65-
getRepository()
66-
.insert(entityArr);
69+
@Transactional(rollbackFor = Throwable.class, transactionManager = TransactionManagers.jdbcTransactionManager)
70+
default void insert(E entityArr){
71+
getRepository().insert(entityArr);
6772
}
6873

69-
@Transactional(transactionManager = TransactionManagers.jdbcTransactionManager)
74+
@Transactional(rollbackFor = Throwable.class,transactionManager = TransactionManagers.jdbcTransactionManager)
75+
@SneakyThrows
7076
default int updateById(K id, E entityArr) {
71-
return getRepository()
72-
.updateById(id, entityArr);
77+
return getRepository().updateById(id, entityArr);
7378
}
7479

75-
@Transactional(transactionManager = TransactionManagers.jdbcTransactionManager)
80+
@Transactional(rollbackFor = Throwable.class,transactionManager = TransactionManagers.jdbcTransactionManager)
81+
@SneakyThrows
7682
default SaveResult save(E entity) {
7783
return getRepository()
7884
.save(Collections.singletonList(entity));
7985
}
8086

81-
@Transactional(transactionManager = TransactionManagers.jdbcTransactionManager)
87+
@Transactional(rollbackFor = Throwable.class,transactionManager = TransactionManagers.jdbcTransactionManager)
88+
@SneakyThrows
8289
default SaveResult save(List<E> entities) {
8390
return getRepository()
8491
.save(entities);
8592
}
8693

87-
@Transactional(transactionManager = TransactionManagers.jdbcTransactionManager)
94+
@Transactional(rollbackFor = Throwable.class,transactionManager = TransactionManagers.jdbcTransactionManager)
95+
@SneakyThrows
8896
default int deleteById(Collection<K> idArr) {
8997
return getRepository().deleteById(idArr);
9098
}
9199

92-
@Transactional(transactionManager = TransactionManagers.jdbcTransactionManager)
100+
@Transactional(rollbackFor = Throwable.class,transactionManager = TransactionManagers.jdbcTransactionManager)
101+
@SneakyThrows
93102
default int deleteById(K idArr) {
94103
return deleteById(Collections.singletonList(idArr));
95104
}
96105

97106
@Transactional(readOnly = true, transactionManager = TransactionManagers.jdbcTransactionManager)
107+
@SneakyThrows
98108
default List<E> query(QueryParamEntity queryParam) {
99109
return createQuery().setParam(queryParam).fetch();
100110
}
101111

102112
@Transactional(readOnly = true, transactionManager = TransactionManagers.jdbcTransactionManager)
113+
@SneakyThrows
103114
default PagerResult<E> queryPager(QueryParamEntity param) {
104115

105116
int count = param.getTotal() == null ? count(param) : param.getTotal();
106117
if (count == 0) {
107-
return PagerResult.empty();
118+
return PagerResult.of(0,Collections.emptyList(),param);
108119
}
109120
param.rePaging(count);
110121

111122
return PagerResult.of(count, query(param), param);
112123
}
113124

114125
@Transactional(readOnly = true, transactionManager = TransactionManagers.jdbcTransactionManager)
126+
@SneakyThrows
115127
default int count(QueryParam param) {
116128
return getRepository()
117129
.createQuery()

hsweb-commons/hsweb-commons-crud/src/main/java/org/hswebframework/web/crud/service/EnableCacheReactiveCrudService.java

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -34,48 +34,55 @@ default Mono<E> findById(Mono<K> publisher) {
3434
}
3535

3636
@Override
37-
@Transactional(transactionManager = TransactionManagers.reactiveTransactionManager)
37+
@Transactional(rollbackFor = Throwable.class, transactionManager = TransactionManagers.reactiveTransactionManager)
3838
default Mono<Integer> updateById(K id, E data) {
3939
return updateById(id, Mono.just(data));
4040
}
4141

4242
@Override
43+
@Transactional(rollbackFor = Throwable.class, transactionManager = TransactionManagers.reactiveTransactionManager)
4344
default Mono<Integer> updateById(K id, Mono<E> entityPublisher) {
4445
return registerClearCache(Collections.singleton("id:" + id))
4546
.then(ReactiveCrudService.super.updateById(id, entityPublisher));
4647
}
4748

4849
@Override
50+
@Transactional(rollbackFor = Throwable.class, transactionManager = TransactionManagers.reactiveTransactionManager)
4951
default Mono<SaveResult> save(Collection<E> collection) {
5052
return registerClearCache()
5153
.then(ReactiveCrudService.super.save(collection));
5254
}
5355

5456
@Override
57+
@Transactional(rollbackFor = Throwable.class, transactionManager = TransactionManagers.reactiveTransactionManager)
5558
default Mono<SaveResult> save(E data) {
5659
return registerClearCache()
5760
.then(ReactiveCrudService.super.save(data));
5861
}
5962

6063
@Override
64+
@Transactional(rollbackFor = Throwable.class, transactionManager = TransactionManagers.reactiveTransactionManager)
6165
default Mono<SaveResult> save(Publisher<E> entityPublisher) {
6266
return registerClearCache()
6367
.then(ReactiveCrudService.super.save(entityPublisher));
6468
}
6569

6670
@Override
71+
@Transactional(rollbackFor = Throwable.class, transactionManager = TransactionManagers.reactiveTransactionManager)
6772
default Mono<Integer> insert(E data) {
6873
return registerClearCache()
6974
.then(ReactiveCrudService.super.insert(data));
7075
}
7176

7277
@Override
78+
@Transactional(rollbackFor = Throwable.class, transactionManager = TransactionManagers.reactiveTransactionManager)
7379
default Mono<Integer> insert(Publisher<E> entityPublisher) {
7480
return registerClearCache()
7581
.then(ReactiveCrudService.super.insert(entityPublisher));
7682
}
7783

7884
@Override
85+
@Transactional(rollbackFor = Throwable.class, transactionManager = TransactionManagers.reactiveTransactionManager)
7986
default Mono<Integer> insertBatch(Publisher<? extends Collection<E>> entityPublisher) {
8087
return registerClearCache()
8188
.then(ReactiveCrudService.super.insertBatch(entityPublisher));
@@ -106,12 +113,13 @@ public Mono<Void> afterCommit() {
106113

107114

108115
@Override
109-
@Transactional(transactionManager = TransactionManagers.reactiveTransactionManager)
116+
@Transactional(rollbackFor = Throwable.class, transactionManager = TransactionManagers.reactiveTransactionManager)
110117
default Mono<Integer> deleteById(K id) {
111118
return deleteById(Mono.just(id));
112119
}
113120

114121
@Override
122+
@Transactional(rollbackFor = Throwable.class, transactionManager = TransactionManagers.reactiveTransactionManager)
115123
default Mono<Integer> deleteById(Publisher<K> idPublisher) {
116124
Flux<K> cache = Flux.from(idPublisher).cache();
117125
return cache

hsweb-commons/hsweb-commons-crud/src/main/java/org/hswebframework/web/crud/service/GenericCrudService.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,9 @@
11
package org.hswebframework.web.crud.service;
22

33
import org.hswebframework.ezorm.rdb.mapping.SyncRepository;
4+
import org.hswebframework.web.api.crud.entity.TransactionManagers;
45
import org.springframework.beans.factory.annotation.Autowired;
6+
import org.springframework.transaction.annotation.Transactional;
57

68
public abstract class GenericCrudService<E,K> implements CrudService<E,K> {
79

hsweb-commons/hsweb-commons-crud/src/main/java/org/hswebframework/web/crud/service/ReactiveCrudService.java

Lines changed: 12 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -90,13 +90,13 @@ default ReactiveDelete createDelete() {
9090
}
9191

9292

93-
@Transactional(readOnly = true, transactionManager = TransactionManagers.reactiveTransactionManager)
93+
@Transactional(rollbackFor = Throwable.class, transactionManager = TransactionManagers.reactiveTransactionManager)
9494
default Mono<E> findById(K id) {
9595
return getRepository()
9696
.findById(id);
9797
}
9898

99-
@Transactional(readOnly = true, transactionManager = TransactionManagers.reactiveTransactionManager)
99+
@Transactional(rollbackFor = Throwable.class, transactionManager = TransactionManagers.reactiveTransactionManager)
100100
default Flux<E> findById(Collection<K> publisher) {
101101
return getRepository()
102102
.findById(publisher);
@@ -114,61 +114,61 @@ default Flux<E> findById(Flux<K> publisher) {
114114
.findById(publisher);
115115
}
116116

117-
@Transactional(transactionManager = TransactionManagers.reactiveTransactionManager)
117+
@Transactional(rollbackFor = Throwable.class, transactionManager = TransactionManagers.reactiveTransactionManager)
118118
default Mono<SaveResult> save(Publisher<E> entityPublisher) {
119119
return getRepository()
120120
.save(entityPublisher);
121121
}
122122

123-
@Transactional(transactionManager = TransactionManagers.reactiveTransactionManager)
123+
@Transactional(rollbackFor = Throwable.class, transactionManager = TransactionManagers.reactiveTransactionManager)
124124
default Mono<SaveResult> save(E data) {
125125
return getRepository()
126126
.save(data);
127127
}
128128

129-
@Transactional(transactionManager = TransactionManagers.reactiveTransactionManager)
129+
@Transactional(rollbackFor = Throwable.class, transactionManager = TransactionManagers.reactiveTransactionManager)
130130
default Mono<SaveResult> save(Collection<E> collection) {
131131
return getRepository()
132132
.save(collection);
133133
}
134134

135-
@Transactional(transactionManager = TransactionManagers.reactiveTransactionManager)
135+
@Transactional(rollbackFor = Throwable.class, transactionManager = TransactionManagers.reactiveTransactionManager)
136136
default Mono<Integer> updateById(K id, Mono<E> entityPublisher) {
137137
return getRepository()
138138
.updateById(id, entityPublisher);
139139
}
140140

141-
@Transactional(transactionManager = TransactionManagers.reactiveTransactionManager)
141+
@Transactional(rollbackFor = Throwable.class, transactionManager = TransactionManagers.reactiveTransactionManager)
142142
default Mono<Integer> updateById(K id, E data) {
143143
return getRepository()
144144
.updateById(id, Mono.just(data));
145145
}
146146

147-
@Transactional(transactionManager = TransactionManagers.reactiveTransactionManager)
147+
@Transactional(rollbackFor = Throwable.class, transactionManager = TransactionManagers.reactiveTransactionManager)
148148
default Mono<Integer> insertBatch(Publisher<? extends Collection<E>> entityPublisher) {
149149
return getRepository()
150150
.insertBatch(entityPublisher);
151151
}
152152

153-
@Transactional(transactionManager = TransactionManagers.reactiveTransactionManager)
153+
@Transactional(rollbackFor = Throwable.class, transactionManager = TransactionManagers.reactiveTransactionManager)
154154
default Mono<Integer> insert(Publisher<E> entityPublisher) {
155155
return getRepository()
156156
.insert(entityPublisher);
157157
}
158158

159-
@Transactional(transactionManager = TransactionManagers.reactiveTransactionManager)
159+
@Transactional(rollbackFor = Throwable.class, transactionManager = TransactionManagers.reactiveTransactionManager)
160160
default Mono<Integer> insert(E data) {
161161
return getRepository()
162162
.insert(Mono.just(data));
163163
}
164164

165-
@Transactional(transactionManager = TransactionManagers.reactiveTransactionManager)
165+
@Transactional(rollbackFor = Throwable.class, transactionManager = TransactionManagers.reactiveTransactionManager)
166166
default Mono<Integer> deleteById(Publisher<K> idPublisher) {
167167
return getRepository()
168168
.deleteById(idPublisher);
169169
}
170170

171-
@Transactional(transactionManager = TransactionManagers.reactiveTransactionManager)
171+
@Transactional(rollbackFor = Throwable.class, transactionManager = TransactionManagers.reactiveTransactionManager)
172172
default Mono<Integer> deleteById(K id) {
173173
return getRepository()
174174
.deleteById(Mono.just(id));

0 commit comments

Comments
 (0)