Ag-merge
Kerangka Kerja Agregasi Data Layanan Cross Cloud
Menyelesaikan masalahnya
Pecahkan rasa sakit dari pemisahan sifat data paging setelah pemisahan layanan cloud pegas atau atribut objek individual. Ini mendukung injeksi otomatis dan transformasi atribut data statis (Kamus Data) dan data kunci primer yang dinamis, di antaranya data statis agregat akan disimpan dicampur tingkat pertama (jambu).
Ambil kastanye:
Dua Layanan, Tabel dalam Layanan A menggunakan nilai tabel dalam Layanan B. Ketika kami meminta tabel dalam layanan A, kami mengumpulkan nilai -nilai tabel dalam layanan B dalam proses kueri layanan A.
Contoh
Untuk kode contoh tertentu, Anda dapat melihat modul ACE-MERGE-DEMO.
| -------- ACE-EUREKA Registration Center | -------- ACE-DATA-MERGE-DEMO Data kueri, contoh agregasi di sini | -------- Penyedia data Ace-Data-Provider
Maven menambahkan dependensi
<dependency> <GroupId> com.github.wxiaoqi </groupid> <ArTifactId> ACE-MERGE-CORE </artifactid> <version> 2.0-snapshot </version> </dependency>
Konfigurasi Gudang yang Disarankan
<Repositories> <Repository> <dent> OSS </dent> <name> oss </name> <ubl> https://oss.sonatype.org/content/groups/public </ruRl> </ repository> </repositori> </repositories>
Mulai Anotasi Kelas
@EnableAcemerge
konfigurasi application.yml
# Data Layanan Lintas Gabungan Gabungan: Diaktifkan: True GuavacachenumMaxSize: 1000 GuavacacherefreshWriteTime: 10 # Min GuavacacherefreshThreadPoolsize: 10 AOP: # Cara Memulai Anotasi, secara otomatis berkumpul diaktifkan: True: True: True
Contoh Kode (Data Objek Bendera @Mergefield perlu dikumpulkan)
@Retention (retentionPolicy.runtime) @Target (value = {elementType.method, elementType.type, elementType.field}) public @interface mergefield { / *** nilai kueri* @return* / string key () default ""; / *** Kelas target* @return*/ class <? Extends Object> Pistign () Default Object.class; / *** metode panggilan* @return*/ string metode () default ""; / *** Apakah akan menggabungkan nilai atribut sebagai nilai kueri* @return*/ boolean isValueEdmerge () default false;} Objek agregat
pengguna kelas publik {nama string privat; // atribut yang membutuhkan agregasi @mergefield (key = "test", patah = iservice2.class, method = "writelog") seks string pribadi; // atribut yang membutuhkan agregasi @mergefield (fign = iservice2.class, method = "getCitys", isValueEdmerge = true) criving city; pengguna publik (nama string, string sex, string city) {this.name = name; this.sex = seks; this.city = City; } public string getCity () {return city; } public void setCity (string city) {this.city = city; } pengguna publik (nama string) {this.name = name; } pengguna publik (nama string, string sex) {this.name = name; this.sex = seks; } public string getName () {return name; } public void setName (name string) {this.name = name; } public string getsex () {return sex; } public void setSex (string sex) {this.sex = sex; }} Metode Sumber Data Agregat (Contohnya adalah melalui Fignclient, atau bisa menjadi objek kacang pegas lokal)
Persyaratan Khusus: Parameter entri harus berupa string, dan nilai pengembalian harus Peta <String, String>. Komposisi nilai pengembalian adalah kunci dan nilai yang sesuai dari atribut objek agregat.
@FeignClient ("test") antarmuka publik iservice2 {@RequestMapping ("car/do") peta publik <string, string> writelog (string test); @RequestMapping ("Mobil/City") Peta Publik <String, String> getCitys (ID String);}Antarmuka layanan jarak jauh yang sesuai
/** * @author Ace * @Create 2017/11/20. */@Restcontroller@requestMapping ("car") Public Class Service2Rest {private Logger Logger = LoggerFactory.getLogger (service2rest.class); @RequestMapping ("do") peta publik <string, string> writelog (string test) {logger.info ("Service 2 menulis log!"); Peta <string, string> peta = new HashMap <String, String> (); peta.put ("man", "jantan"); peta.put ("wanita", "wanita"); peta mengembalikan; } @RequestMapping ("city") peta publik <string, string> getCity (string id) {logger.info ("Service 2 adalah menulis log!"+Id); Peta <string, string> peta = new HashMap <String, String> (); Map.put ("1", "Guangzhou"); Map.put ("2", "Wuhan"); peta mengembalikan; }} Kelas Biz yang mengumpulkan objek (metode berikut adalah menggunakan anotasi pemindaian AOP)
@Service @slf4jpublic kelas userbiz {@autowired private mergecore mergecore; / ** * Metode agregasi anotasi AOP * Nilai pengembalian dari metode agregasi harus daftar, * Jika itu adalah objek yang kompleks, Anda perlu menyesuaikan parser agregasi Anda sendiri (menerapkan antarmuka imergeresultParser) * @mergeresult (hasil hasil = testmergeresultParser) <coSermclass) <deris> usery (daftener> noughuser = testmergeresultParser) <class) <seruSer <) <) <) <) <) <) <) <) <) <) <) <) <) <) <) <) <) <) <) <) <) <) <) <) <) <) <) <) <) <) <) <) <) <) <) <) <) <) <) <) <) <) <) <) <) <) { @get oMermergereser (classer) @mergerSer (classer <) ArrayList <User> (); untuk (int i = 1000; i> 0; i--) {user.add (pengguna baru ("zhangsan" + i, "man", "1")); user.add (pengguna baru ("lisi" + i, "wanita", "2")); user.add (pengguna baru ("wangwu" + i, "unkonwn", "2")); } pengembalian pengguna; } / *** Metode agregasi manual* @return* / Daftar publik <user> getUser () {arrayList <user> users = new ArrayList <User> (); untuk (int i = 1000; i> 0; i--) {user.add (pengguna baru ("zhangsan" + i, "man", "1")); user.add (pengguna baru ("lisi" + i, "wanita", "2")); user.add (pengguna baru ("wangwu" + i, "unkonwn", "2")); } coba {// daftar agregasi mergecore.mergeresult (user.class, pengguna); // agregasi objek tunggal // mergecore.mergeOne (user.class, users.get (0)); } catch (Exception e) {LOG.Error ("Agregasi data gagal", e); } akhirnya {pengembalian pengguna; }}}Di atas adalah semua konten artikel ini. Saya berharap ini akan membantu untuk pembelajaran semua orang dan saya harap semua orang akan lebih mendukung wulin.com.