Compare commits

..
1125 Commits
Author SHA1 Message Date
buildmaster 70c9c223dc Sync docs from master to gh-pages 2020-06-08 15:58:37 +00:00
buildmaster cb9de2a1f9 Sync docs from master to gh-pages 2020-06-05 14:31:33 +00:00
buildmaster cb18434a15 Sync docs from master to gh-pages 2020-06-04 13:00:36 +00:00
buildmaster 6f473766b2 Sync docs from 2.2.x to gh-pages 2020-06-04 12:55:39 +00:00
buildmaster 1f810ee84a Sync docs from master to gh-pages 2020-06-04 11:42:09 +00:00
buildmaster 78ded70176 Sync docs from master to gh-pages 2020-06-04 11:37:49 +00:00
buildmaster f8639a5da3 Sync docs from 2.2.x to gh-pages 2020-06-04 11:21:09 +00:00
buildmaster 22d99e9ebb Sync docs from 2.2.x to gh-pages 2020-05-28 17:54:42 +00:00
buildmaster 0f5203621b Sync docs from master to gh-pages 2020-05-28 11:38:35 +00:00
buildmaster 5cb71dd455 Sync docs from master to gh-pages 2020-05-27 18:20:09 +00:00
buildmaster d106356c86 Sync docs from 2.2.x to gh-pages 2020-05-27 18:15:36 +00:00
buildmaster e9bc650bf0 Sync docs from master to gh-pages 2020-05-27 11:38:38 +00:00
buildmaster d1318c25fb Sync docs from 2.2.x to gh-pages 2020-05-22 11:25:53 +00:00
buildmaster 15c49a8a09 Sync docs from master to gh-pages 2020-05-21 23:38:52 +00:00
buildmaster f5283f6fab Sync docs from master to gh-pages 2020-05-11 11:40:12 +00:00
buildmaster 12566ca3f2 Sync docs from 2.2.x to gh-pages 2020-05-11 11:36:28 +00:00
buildmaster 714af89fc9 Sync docs from master to gh-pages 2020-05-11 11:28:24 +00:00
buildmaster 420bb8a2b1 Sync docs from 2.2.x to gh-pages 2020-05-11 11:28:06 +00:00
buildmaster 94882f725e Sync docs from 2.2.x to gh-pages 2020-04-23 11:25:43 +00:00
buildmaster b03707b684 Sync docs from master to gh-pages 2020-04-22 23:39:02 +00:00
buildmaster 2ee291b91f Sync docs from master to gh-pages 2020-04-22 21:17:39 +00:00
buildmaster 26df6e6f56 Sync docs from master to gh-pages 2020-04-17 02:56:05 +00:00
buildmaster 93803a50ed Sync docs from master to gh-pages 2020-04-02 11:39:55 +00:00
buildmaster de657732a0 Sync docs from master to gh-pages 2020-04-01 23:39:06 +00:00
buildmaster 24806fb4d7 Sync docs from master to gh-pages 2020-03-27 12:06:21 +00:00
buildmaster 1d48586b31 Sync docs from 2.2.x to gh-pages 2020-03-27 12:03:02 +00:00
buildmaster 11f9bb193b Sync docs from 2.2.x to gh-pages 2020-03-20 19:11:46 +00:00
buildmaster 46dc043744 Sync docs from master to gh-pages 2020-03-20 19:06:42 +00:00
buildmaster 52e83ed7f3 Sync docs from 2.2.x to gh-pages 2020-03-20 18:59:42 +00:00
buildmaster 7a0b875d05 Sync docs from 2.2.x to gh-pages 2020-03-06 17:54:31 +00:00
buildmaster f66cc4a152 Sync docs from 2.1.x to gh-pages 2020-03-05 17:42:45 +00:00
buildmaster 1c2ff4f510 Sync docs from 2.1.x to gh-pages 2020-03-04 17:42:42 +00:00
buildmaster 9808e40a9a Sync docs from 2.1.x to gh-pages 2020-03-03 17:42:44 +00:00
buildmaster a723757432 Sync docs from 2.1.x to gh-pages 2020-03-02 17:42:51 +00:00
buildmaster 3fe3252e51 Sync docs from 2.1.x to gh-pages 2020-03-01 17:42:43 +00:00
buildmaster 210fe1dd75 Sync docs from 2.1.x to gh-pages 2020-02-29 17:42:43 +00:00
buildmaster a42e3ebd26 Sync docs from 2.1.x to gh-pages 2020-02-28 17:43:43 +00:00
buildmaster 014407af57 Sync docs from 2.1.x to gh-pages 2020-02-27 17:43:40 +00:00
buildmaster 47f4188e7d Sync docs from 2.1.x to gh-pages 2020-02-26 17:43:44 +00:00
buildmaster 30a77eeabb Sync docs from 2.1.x to gh-pages 2020-02-25 17:43:44 +00:00
buildmaster d1c07b1bff Sync docs from 2.1.x to gh-pages 2020-02-24 17:43:42 +00:00
buildmaster 6dcce046d3 Sync docs from 2.1.x to gh-pages 2020-02-23 17:43:41 +00:00
buildmaster fa39ec6783 Sync docs from 2.1.x to gh-pages 2020-02-22 17:43:42 +00:00
buildmaster fa6cb9ce82 Sync docs from master to gh-pages 2020-02-22 13:12:29 +00:00
buildmaster 81b66f2a3a Sync docs from 2.1.x to gh-pages 2020-02-21 17:43:44 +00:00
buildmaster 5f252d6b56 Sync docs from 2.1.x to gh-pages 2020-02-20 17:43:45 +00:00
buildmaster 4918a0915d Sync docs from 2.1.x to gh-pages 2020-02-19 17:43:41 +00:00
buildmaster 8732a925ca Sync docs from 2.1.x to gh-pages 2020-02-18 17:43:42 +00:00
buildmaster 983b9891e2 Sync docs from 2.1.x to gh-pages 2020-02-17 17:43:42 +00:00
buildmaster 607c2fe548 Sync docs from 2.1.x to gh-pages 2020-02-16 17:43:41 +00:00
buildmaster c62bc467b0 Sync docs from 2.1.x to gh-pages 2020-02-15 17:42:41 +00:00
buildmaster 870e48bc67 Sync docs from 2.1.x to gh-pages 2020-02-14 17:42:42 +00:00
buildmaster 2b317d83c0 Sync docs from 2.1.x to gh-pages 2020-02-13 17:42:43 +00:00
buildmaster f86abeb331 Sync docs from 2.1.x to gh-pages 2020-02-12 17:43:42 +00:00
buildmaster 44e21cf65e Sync docs from 2.1.x to gh-pages 2020-02-11 17:42:41 +00:00
buildmaster 99ea1363e3 Sync docs from 2.1.x to gh-pages 2020-02-10 17:42:45 +00:00
buildmaster 029a1395bb Sync docs from 2.1.x to gh-pages 2020-02-09 17:42:40 +00:00
buildmaster d1d4878c22 Sync docs from 2.1.x to gh-pages 2020-02-08 17:42:41 +00:00
buildmaster e4ea2d67c0 Sync docs from 2.1.x to gh-pages 2020-02-07 17:42:41 +00:00
buildmaster 97901c7428 Sync docs from 2.1.x to gh-pages 2020-02-06 17:42:42 +00:00
buildmaster 314b49a50e Sync docs from 2.1.x to gh-pages 2020-02-05 17:42:41 +00:00
buildmaster 838f670916 Sync docs from 2.1.x to gh-pages 2020-02-04 17:42:43 +00:00
buildmaster d6e9e7fa6b Sync docs from 2.1.x to gh-pages 2020-02-03 17:42:46 +00:00
buildmaster 48eb2c7980 Sync docs from 2.1.x to gh-pages 2020-02-02 17:42:45 +00:00
buildmaster ce489d9b7b Sync docs from 2.1.x to gh-pages 2020-02-01 17:42:43 +00:00
buildmaster 606f8ee13d Sync docs from 2.1.x to gh-pages 2020-01-31 21:54:06 +00:00
buildmaster 7eed666c76 Sync docs from 2.1.x to gh-pages 2020-01-31 17:42:46 +00:00
buildmaster a0adf6942f Sync docs from 2.1.x to gh-pages 2020-01-30 17:42:45 +00:00
buildmaster 88e9bbec07 Sync docs from master to gh-pages 2020-01-29 16:01:53 +00:00
buildmaster b8e77279d2 Sync docs from 2.1.x to gh-pages 2020-01-29 15:58:50 +00:00
buildmaster 1f7657e3ed Sync docs from master to gh-pages 2020-01-29 15:40:57 +00:00
buildmaster 1e92524b24 Sync docs from 2.1.x to gh-pages 2020-01-29 15:39:14 +00:00
buildmaster a85a74c357 Sync docs from 2.1.x to gh-pages 2020-01-28 17:43:36 +00:00
buildmaster 31a6ee92d3 Sync docs from 2.1.x to gh-pages 2020-01-27 17:45:44 +00:00
buildmaster c5e7b47612 Sync docs from 2.1.x to gh-pages 2020-01-26 17:42:47 +00:00
buildmaster 0be019204c Sync docs from 2.1.x to gh-pages 2020-01-25 17:42:52 +00:00
buildmaster c82054d37d Sync docs from 2.1.x to gh-pages 2020-01-24 17:43:49 +00:00
buildmaster 1aba99bc14 Sync docs from 2.1.x to gh-pages 2020-01-23 17:42:45 +00:00
buildmaster 0ca06097f7 Sync docs from 2.1.x to gh-pages 2020-01-22 17:43:30 +00:00
buildmaster cee91e2006 Sync docs from master to gh-pages 2020-01-21 17:43:14 +00:00
buildmaster 279ab59d67 Sync docs from 2.1.x to gh-pages 2020-01-21 17:43:02 +00:00
buildmaster f52b42d4e3 Sync docs from 2.1.x to gh-pages 2020-01-20 17:43:53 +00:00
buildmaster 414b8068db Sync docs from 2.1.x to gh-pages 2020-01-19 17:42:42 +00:00
buildmaster 3055e0bca5 Sync docs from 2.1.x to gh-pages 2020-01-18 17:42:41 +00:00
buildmaster b186b16e1e Sync docs from 2.1.x to gh-pages 2020-01-17 17:42:42 +00:00
buildmaster 155e215069 Sync docs from 2.1.x to gh-pages 2020-01-16 17:42:38 +00:00
buildmaster b3e8fea245 Sync docs from 2.1.x to gh-pages 2020-01-15 17:43:53 +00:00
buildmaster 578c18070e Sync docs from 2.1.x to gh-pages 2020-01-14 17:43:42 +00:00
buildmaster ad7ee71a80 Sync docs from 2.1.x to gh-pages 2020-01-13 17:45:08 +00:00
buildmaster e7f5131b12 Sync docs from 2.1.x to gh-pages 2020-01-12 17:43:41 +00:00
buildmaster c16fcb6f0a Sync docs from 2.1.x to gh-pages 2020-01-11 17:43:35 +00:00
buildmaster 5648242e0a Sync docs from 2.1.x to gh-pages 2020-01-10 17:43:41 +00:00
buildmaster 86b556902d Sync docs from 2.1.x to gh-pages 2020-01-09 17:00:26 +00:00
buildmaster ab08f989c3 Sync docs from 2.1.x to gh-pages 2020-01-08 17:42:53 +00:00
buildmaster 7829c33c73 Sync docs from 2.1.x to gh-pages 2020-01-07 17:42:41 +00:00
buildmaster c5a2949b03 Sync docs from 2.1.x to gh-pages 2020-01-06 17:43:04 +00:00
buildmaster 869119c3f5 Sync docs from 2.1.x to gh-pages 2020-01-05 17:42:49 +00:00
buildmaster 374f272017 Sync docs from 2.1.x to gh-pages 2020-01-04 17:42:41 +00:00
buildmaster d94e71fe8d Sync docs from 2.1.x to gh-pages 2020-01-03 17:42:44 +00:00
buildmaster 73c5ff9b27 Sync docs from 2.1.x to gh-pages 2020-01-02 17:42:40 +00:00
buildmaster bb627d042d Sync docs from 2.1.x to gh-pages 2020-01-01 17:42:37 +00:00
buildmaster 1541f23b0f Sync docs from 2.1.x to gh-pages 2019-12-31 17:42:38 +00:00
buildmaster ca21253213 Sync docs from 2.1.x to gh-pages 2019-12-30 17:42:52 +00:00
buildmaster c4ca2d19ef Sync docs from 2.1.x to gh-pages 2019-12-29 17:42:45 +00:00
buildmaster 7bb3e482b5 Sync docs from 2.1.x to gh-pages 2019-12-28 02:42:47 +00:00
buildmaster 20a0137013 Sync docs from 2.1.x to gh-pages 2019-12-27 02:42:46 +00:00
buildmaster dcffe08ea7 Sync docs from 2.1.x to gh-pages 2019-12-26 02:42:51 +00:00
buildmaster c66d7c7769 Sync docs from 2.1.x to gh-pages 2019-12-25 02:42:39 +00:00
buildmaster d931c49fec Sync docs from 2.1.x to gh-pages 2019-12-24 02:43:40 +00:00
buildmaster a93d067157 Sync docs from 2.1.x to gh-pages 2019-12-23 02:43:37 +00:00
buildmaster 9f31585a04 Sync docs from 2.1.x to gh-pages 2019-12-22 02:43:33 +00:00
buildmaster 7bcccf95fa Sync docs from 2.1.x to gh-pages 2019-12-21 02:43:37 +00:00
buildmaster 9d1f713454 Sync docs from master to gh-pages 2019-12-20 12:52:09 +00:00
buildmaster 2e93f82541 Sync docs from 2.1.x to gh-pages 2019-12-20 02:42:40 +00:00
buildmaster 5455370f03 Sync docs from 2.1.x to gh-pages 2019-12-19 02:42:39 +00:00
buildmaster 0166848dbc Sync docs from 2.1.x to gh-pages 2019-12-18 02:42:36 +00:00
buildmaster 7be5b6a320 Sync docs from 2.1.x to gh-pages 2019-12-17 02:42:37 +00:00
buildmaster 1ab5ca806f Sync docs from master to gh-pages 2019-12-16 15:30:08 +00:00
buildmaster 877e133822 Sync docs from 2.1.x to gh-pages 2019-12-16 02:42:35 +00:00
buildmaster 2aa626195a Sync docs from 2.1.x to gh-pages 2019-12-15 02:42:36 +00:00
buildmaster 92a5a2dc54 Sync docs from 2.1.x to gh-pages 2019-12-14 02:42:38 +00:00
buildmaster ae1b1b2e88 Sync docs from 2.1.x to gh-pages 2019-12-13 02:42:40 +00:00
buildmaster ab4c5c445e Sync docs from 2.1.x to gh-pages 2019-12-12 02:42:42 +00:00
buildmaster 91a1dc9138 Sync docs from 2.1.x to gh-pages 2019-12-11 02:42:45 +00:00
buildmaster d50c71de41 Sync docs from 2.1.x to gh-pages 2019-12-10 02:42:37 +00:00
buildmaster 37554de529 Sync docs from 2.1.x to gh-pages 2019-12-09 02:43:33 +00:00
buildmaster b2a17adca5 Sync docs from 2.1.x to gh-pages 2019-12-08 02:43:35 +00:00
buildmaster ec094769f6 Sync docs from 2.1.x to gh-pages 2019-12-07 02:43:38 +00:00
buildmaster 3ab0718435 Sync docs from 2.1.x to gh-pages 2019-12-06 02:44:13 +00:00
buildmaster b17751162a Sync docs from 2.1.x to gh-pages 2019-12-05 02:43:45 +00:00
buildmaster 6c4f44d370 Sync docs from 2.1.x to gh-pages 2019-12-04 02:43:07 +00:00
buildmaster 0de0d46efd Sync docs from 2.1.x to gh-pages 2019-12-03 02:43:11 +00:00
buildmaster 4279123bce Sync docs from 2.1.x to gh-pages 2019-12-02 02:42:35 +00:00
buildmaster ed5fd56c9a Sync docs from 2.1.x to gh-pages 2019-12-01 02:42:36 +00:00
buildmaster 86c4b08834 Sync docs from 2.1.x to gh-pages 2019-11-30 02:42:40 +00:00
buildmaster 95c4ce8418 Sync docs from 2.1.x to gh-pages 2019-11-29 02:42:36 +00:00
buildmaster 27e14baef7 Sync docs from 2.1.x to gh-pages 2019-11-28 02:42:43 +00:00
buildmaster 706f00f018 Sync docs from master to gh-pages 2019-11-27 11:39:00 +00:00
buildmaster e7d6060fc5 Sync docs from master to gh-pages 2019-11-27 11:38:44 +00:00
buildmaster a23e7d14db Sync docs from master to gh-pages 2019-11-27 11:38:04 +00:00
buildmaster fb3213b80f Sync docs from 2.1.x to gh-pages 2019-11-27 02:42:42 +00:00
buildmaster ae260a1b3a Sync docs from master to gh-pages 2019-11-26 11:37:51 +00:00
buildmaster 4fd48879b4 Sync docs from master to gh-pages 2019-11-26 10:14:56 +00:00
buildmaster d6d0146c73 Sync docs from 2.1.x to gh-pages 2019-11-26 02:43:02 +00:00
buildmaster 8e5c3b7a6b Sync docs from 2.1.x to gh-pages 2019-11-25 02:42:53 +00:00
buildmaster ce95b39692 Sync docs from 2.1.x to gh-pages 2019-11-24 02:42:37 +00:00
buildmaster c48688285d Sync docs from 2.1.x to gh-pages 2019-11-23 02:42:41 +00:00
buildmaster b1e9f4c0a2 Sync docs from 2.1.x to gh-pages 2019-11-22 02:42:41 +00:00
buildmaster b749ea21ca Sync docs from 2.1.x to gh-pages 2019-11-21 02:42:42 +00:00
buildmaster fc5f02ec0e Sync docs from 2.1.x to gh-pages 2019-11-20 02:42:46 +00:00
buildmaster 0f040ce9d5 Sync docs from 2.1.x to gh-pages 2019-11-19 02:42:57 +00:00
buildmaster c16deef00f Sync docs from 2.1.x to gh-pages 2019-11-18 15:12:59 +00:00
buildmaster d3e87faabe Sync docs from 2.1.x to gh-pages 2019-11-18 02:42:40 +00:00
buildmaster 69b49de041 Sync docs from 2.1.x to gh-pages 2019-11-17 02:42:36 +00:00
buildmaster 6f853cc515 Sync docs from 2.1.x to gh-pages 2019-11-16 02:43:38 +00:00
buildmaster 81b31a1b39 Sync docs from 2.1.x to gh-pages 2019-11-15 02:43:34 +00:00
buildmaster 79837793c9 Sync docs from 2.1.x to gh-pages 2019-11-14 02:43:35 +00:00
buildmaster a6f38d9f38 Sync docs from 2.1.x to gh-pages 2019-11-13 02:43:35 +00:00
buildmaster 6e37b8d62d Sync docs from 2.1.x to gh-pages 2019-11-12 02:43:34 +00:00
buildmaster 2c60c29621 Sync docs from 2.1.x to gh-pages 2019-11-11 02:43:34 +00:00
buildmaster 9f285c9bbf Sync docs from 2.1.x to gh-pages 2019-11-10 02:43:40 +00:00
buildmaster 18037dc675 Sync docs from 2.1.x to gh-pages 2019-11-09 02:43:38 +00:00
buildmaster f3b41ef71a Sync docs from 2.1.x to gh-pages 2019-11-08 02:43:39 +00:00
buildmaster b0ae7cc66e Sync docs from master to gh-pages 2019-11-07 13:38:53 +00:00
buildmaster 7f6dc7b6f8 Sync docs from 2.1.x to gh-pages 2019-11-07 02:43:34 +00:00
buildmaster 90c5393970 Sync docs from master to gh-pages 2019-11-06 18:08:00 +00:00
buildmaster 290bc15f07 Sync docs from 2.1.x to gh-pages 2019-11-06 02:43:40 +00:00
buildmaster dfdc339994 Sync docs from 2.1.x to gh-pages 2019-11-05 02:43:41 +00:00
buildmaster 98ce782381 Sync docs from master to gh-pages 2019-11-04 16:54:40 +00:00
buildmaster d7a8130be5 Sync docs from 2.1.x to gh-pages 2019-11-04 02:43:34 +00:00
buildmaster 21896f6eb5 Sync docs from 2.1.x to gh-pages 2019-11-03 02:43:37 +00:00
buildmaster 7f5ae4e4f8 Sync docs from 2.1.x to gh-pages 2019-11-02 02:43:39 +00:00
buildmaster 7b4735b95d Sync docs from 2.1.x to gh-pages 2019-11-01 02:43:38 +00:00
buildmaster d1c4095ef5 Sync docs from 2.1.x to gh-pages 2019-10-31 02:43:39 +00:00
buildmaster cf9b575cba Sync docs from 2.1.x to gh-pages 2019-10-30 02:43:39 +00:00
buildmaster 5f31c56b2f Sync docs from 2.1.x to gh-pages 2019-10-29 02:42:50 +00:00
buildmaster 35fc3e02c8 Sync docs from 2.1.x to gh-pages 2019-10-28 02:43:09 +00:00
buildmaster a2fc3f2bec Sync docs from 2.1.x to gh-pages 2019-10-27 02:43:00 +00:00
buildmaster ace93678f0 Sync docs from 2.1.x to gh-pages 2019-10-26 02:43:16 +00:00
buildmaster acfc171316 Sync docs from 2.1.x to gh-pages 2019-10-25 02:42:59 +00:00
buildmaster 8cd287aac8 Sync docs from 2.1.x to gh-pages 2019-10-24 02:43:00 +00:00
buildmaster 1c370cf3b4 Sync docs from 2.1.x to gh-pages 2019-10-23 02:43:28 +00:00
buildmaster 1e0314650c Sync docs from 2.1.x to gh-pages 2019-10-22 02:43:00 +00:00
buildmaster 9e5ca7bda0 Sync docs from 2.1.x to gh-pages 2019-10-21 02:42:51 +00:00
buildmaster 25fa83ef88 Sync docs from 2.1.x to gh-pages 2019-10-20 02:42:42 +00:00
buildmaster 98aeddc2a3 Sync docs from 2.1.x to gh-pages 2019-10-19 02:43:18 +00:00
buildmaster 73c1814748 Sync docs from 2.1.x to gh-pages 2019-10-18 02:43:19 +00:00
buildmaster 3c5f736af6 Sync docs from 2.1.x to gh-pages 2019-10-17 02:43:27 +00:00
buildmaster d200fd2f09 Sync docs from 2.1.x to gh-pages 2019-10-16 02:43:25 +00:00
buildmaster 40e882ed34 Sync docs from 2.1.x to gh-pages 2019-10-15 02:43:22 +00:00
buildmaster ef0d909d09 Sync docs from 2.1.x to gh-pages 2019-10-14 02:43:31 +00:00
buildmaster 4b044313f8 Sync docs from 2.1.x to gh-pages 2019-10-13 02:43:19 +00:00
buildmaster 7bd09e9ae0 Sync docs from 2.1.x to gh-pages 2019-10-12 02:43:31 +00:00
buildmaster 229ff35e66 Sync docs from 2.1.x to gh-pages 2019-10-11 02:43:18 +00:00
buildmaster 998d01fe8c Sync docs from 2.1.x to gh-pages 2019-10-10 02:43:15 +00:00
buildmaster 56ad38495f Sync docs from 2.1.x to gh-pages 2019-10-09 02:43:17 +00:00
buildmaster 8aba455f59 Sync docs from 2.1.x to gh-pages 2019-10-08 02:43:17 +00:00
buildmaster 817f1ee554 Sync docs from 2.1.x to gh-pages 2019-10-07 02:43:13 +00:00
buildmaster 1ee53148a4 Sync docs from 2.1.x to gh-pages 2019-10-06 02:43:26 +00:00
buildmaster e95f6d235f Sync docs from 2.1.x to gh-pages 2019-10-05 02:43:10 +00:00
buildmaster 15b4447ec9 Sync docs from master to gh-pages 2019-10-04 14:39:19 +00:00
buildmaster ccb15c6342 Sync docs from 2.1.x to gh-pages 2019-10-04 02:44:07 +00:00
buildmaster 6ce79dc659 Sync docs from 2.1.x to gh-pages 2019-10-03 02:43:15 +00:00
buildmaster 86a5668fa2 Sync docs from 2.1.x to gh-pages 2019-10-02 02:46:03 +00:00
buildmaster 5ac303cb19 Sync docs from 2.1.x to gh-pages 2019-10-01 02:43:22 +00:00
buildmaster 7ff4e9a37e Sync docs from 2.1.x to gh-pages 2019-09-30 02:43:31 +00:00
buildmaster 17d6fc94b2 Sync docs from 2.1.x to gh-pages 2019-09-29 02:43:25 +00:00
buildmaster 0bb85982db Sync docs from 2.1.x to gh-pages 2019-09-28 02:43:40 +00:00
buildmaster ef54661fe3 Sync docs from 2.1.x to gh-pages 2019-09-27 02:43:28 +00:00
buildmaster caf51f87df Sync docs from 2.1.x to gh-pages 2019-09-26 02:42:40 +00:00
buildmaster 97f82cd9df Sync docs from 2.1.x to gh-pages 2019-09-25 02:43:18 +00:00
buildmaster fa1fadf5d3 Sync docs from 2.1.x to gh-pages 2019-09-24 02:43:16 +00:00
buildmaster 3db9ae31d1 Sync docs from 2.1.x to gh-pages 2019-09-23 02:43:15 +00:00
buildmaster 3249a55107 Sync docs from 2.1.x to gh-pages 2019-09-22 02:43:16 +00:00
buildmaster 5e076582bd Sync docs from 2.1.x to gh-pages 2019-09-21 02:43:13 +00:00
buildmaster 9c19c80532 Sync docs from 2.1.x to gh-pages 2019-09-20 02:42:59 +00:00
buildmaster 3776228973 Sync docs from 2.1.x to gh-pages 2019-09-19 02:42:43 +00:00
buildmaster 7013fc6b12 Sync docs from 2.1.x to gh-pages 2019-09-18 02:42:50 +00:00
buildmaster f71ba48b60 Sync docs from 2.1.x to gh-pages 2019-09-17 02:43:29 +00:00
buildmaster 0b915c00c5 Sync docs from master to gh-pages 2019-09-16 17:39:04 +00:00
buildmaster 2b93018b5f Sync docs from 2.1.x to gh-pages 2019-09-16 02:42:50 +00:00
buildmaster ff5c225b95 Sync docs from 2.0.x to gh-pages 2019-09-16 01:34:48 +00:00
buildmaster 447cd7df0c Sync docs from 2.1.x to gh-pages 2019-09-15 02:42:50 +00:00
buildmaster 2f9cb19a86 Sync docs from 2.0.x to gh-pages 2019-09-15 01:34:49 +00:00
buildmaster 60ae70be90 Sync docs from 2.1.x to gh-pages 2019-09-14 02:43:05 +00:00
buildmaster e68bda44ee Sync docs from 2.0.x to gh-pages 2019-09-14 01:34:59 +00:00
buildmaster ec7ea03b2f Sync docs from 2.1.x to gh-pages 2019-09-13 02:43:13 +00:00
buildmaster e23607cf5f Sync docs from 2.0.x to gh-pages 2019-09-13 01:35:11 +00:00
buildmaster 9f80cecd5f Sync docs from 2.1.x to gh-pages 2019-09-12 02:43:20 +00:00
buildmaster 6c307eb973 Sync docs from 2.0.x to gh-pages 2019-09-12 01:35:19 +00:00
buildmaster df3649ff27 Sync docs from 2.1.x to gh-pages 2019-09-11 02:43:39 +00:00
buildmaster 11dfb87fd6 Sync docs from 2.0.x to gh-pages 2019-09-11 01:35:29 +00:00
buildmaster b2fd4339b7 Sync docs from master to gh-pages 2019-09-10 13:30:21 +00:00
buildmaster a9838dd5c1 Sync docs from 2.1.x to gh-pages 2019-09-10 02:42:45 +00:00
buildmaster 9b0e43c6de Sync docs from 2.0.x to gh-pages 2019-09-10 01:34:39 +00:00
buildmaster d8e75f1543 Sync docs from 2.1.x to gh-pages 2019-09-09 19:17:41 +00:00
buildmaster a009c29896 Sync docs from 2.1.x to gh-pages 2019-09-09 02:42:36 +00:00
buildmaster fc8806bca8 Sync docs from 2.0.x to gh-pages 2019-09-09 01:34:27 +00:00
buildmaster 25fb4e6afe Sync docs from 2.1.x to gh-pages 2019-09-08 02:42:33 +00:00
buildmaster 4a9761cbec Sync docs from 2.0.x to gh-pages 2019-09-08 01:34:27 +00:00
buildmaster 655613a6d8 Sync docs from 2.1.x to gh-pages 2019-09-07 02:42:37 +00:00
buildmaster 6a08d737ce Sync docs from 2.0.x to gh-pages 2019-09-07 01:34:27 +00:00
buildmaster c5ed4a2b47 Sync docs from 2.1.x to gh-pages 2019-09-06 02:42:39 +00:00
buildmaster 5456e20127 Sync docs from 2.0.x to gh-pages 2019-09-06 01:34:34 +00:00
buildmaster 8e9e3cb913 Sync docs from 2.1.x to gh-pages 2019-09-05 02:42:44 +00:00
buildmaster fb7d07de18 Sync docs from 2.0.x to gh-pages 2019-09-05 01:34:36 +00:00
buildmaster ec4043269f Sync docs from 2.1.x to gh-pages 2019-09-04 02:42:35 +00:00
buildmaster 98690d7f85 Sync docs from 2.0.x to gh-pages 2019-09-04 01:34:28 +00:00
buildmaster 42af8e431d Sync docs from 2.1.x to gh-pages 2019-09-03 02:43:08 +00:00
buildmaster 4de7d38ae1 Sync docs from 2.0.x to gh-pages 2019-09-03 01:35:03 +00:00
buildmaster e41cdcc186 Sync docs from 2.1.x to gh-pages 2019-09-02 02:43:14 +00:00
buildmaster 7726b22ff7 Sync docs from 2.0.x to gh-pages 2019-09-02 01:35:03 +00:00
buildmaster 0c84862742 Sync docs from 2.1.x to gh-pages 2019-09-01 02:43:07 +00:00
buildmaster a41c130370 Sync docs from 2.0.x to gh-pages 2019-09-01 01:34:58 +00:00
buildmaster 7d2e522ab6 Sync docs from 2.1.x to gh-pages 2019-08-31 02:43:12 +00:00
buildmaster b5b06fdca3 Sync docs from 2.0.x to gh-pages 2019-08-31 01:35:12 +00:00
buildmaster 532eaaf973 Sync docs from 2.1.x to gh-pages 2019-08-30 14:35:26 +00:00
buildmaster 9b20cb8298 Sync docs from 2.0.x to gh-pages 2019-08-30 01:35:04 +00:00
buildmaster 272e3105e5 Sync docs from 2.1.x to gh-pages 2019-08-29 02:43:01 +00:00
buildmaster 78acbacc11 Sync docs from 2.0.x to gh-pages 2019-08-29 01:34:56 +00:00
buildmaster 7b7f4b56fb Sync docs from 2.1.x to gh-pages 2019-08-28 02:43:01 +00:00
buildmaster 42fa23c751 Sync docs from 2.0.x to gh-pages 2019-08-28 01:34:54 +00:00
buildmaster 903b216241 Sync docs from 2.1.x to gh-pages 2019-08-27 02:43:01 +00:00
buildmaster c698ff3425 Sync docs from 2.0.x to gh-pages 2019-08-27 01:34:55 +00:00
buildmaster 564c431768 Sync docs from 2.1.x to gh-pages 2019-08-26 02:43:03 +00:00
buildmaster 403179f0f5 Sync docs from 2.0.x to gh-pages 2019-08-26 01:35:01 +00:00
buildmaster 21e0653f85 Sync docs from 2.1.x to gh-pages 2019-08-25 02:43:18 +00:00
buildmaster ba36e3574d Sync docs from 2.0.x to gh-pages 2019-08-25 01:35:17 +00:00
buildmaster 93198b8172 Sync docs from 2.1.x to gh-pages 2019-08-24 02:43:18 +00:00
buildmaster 7d48a7133b Sync docs from 2.0.x to gh-pages 2019-08-24 01:35:10 +00:00
buildmaster 5b4d2d93d9 Sync docs from 2.1.x to gh-pages 2019-08-23 02:43:15 +00:00
buildmaster fb196e9ffe Sync docs from 2.0.x to gh-pages 2019-08-23 01:35:08 +00:00
buildmaster 128d33fdc6 Sync docs from master to gh-pages 2019-08-22 15:24:54 +00:00
buildmaster 91c76f3327 Sync docs from 2.1.x to gh-pages 2019-08-22 02:43:22 +00:00
buildmaster e7162f0d7b Sync docs from 2.0.x to gh-pages 2019-08-22 01:35:18 +00:00
buildmaster 21dfef31d8 Sync docs from 2.1.x to gh-pages 2019-08-21 02:43:34 +00:00
buildmaster 84f13a13b3 Sync docs from 2.0.x to gh-pages 2019-08-21 01:35:01 +00:00
buildmaster 90085db8e1 Sync docs from 2.1.x to gh-pages 2019-08-20 02:43:02 +00:00
buildmaster 65fd7251f4 Sync docs from 2.0.x to gh-pages 2019-08-20 01:34:58 +00:00
buildmaster 6c67565bf5 Sync docs from 2.1.x to gh-pages 2019-08-19 02:42:51 +00:00
buildmaster 4e41943216 Sync docs from 2.0.x to gh-pages 2019-08-19 01:34:50 +00:00
buildmaster 9d53091456 Sync docs from 2.1.x to gh-pages 2019-08-18 02:42:39 +00:00
buildmaster e7e3eddab4 Sync docs from 2.0.x to gh-pages 2019-08-18 01:34:39 +00:00
buildmaster da0736bc61 Sync docs from 2.1.x to gh-pages 2019-08-17 02:42:43 +00:00
buildmaster d105852b25 Sync docs from 2.0.x to gh-pages 2019-08-17 01:34:31 +00:00
buildmaster de3579335d Sync docs from 2.1.x to gh-pages 2019-08-16 02:42:34 +00:00
buildmaster 7f51541455 Sync docs from 2.0.x to gh-pages 2019-08-16 01:34:29 +00:00
buildmaster 5c2a9bcc78 Sync docs from 2.1.x to gh-pages 2019-08-15 02:43:22 +00:00
buildmaster b9a52d585b Sync docs from 2.0.x to gh-pages 2019-08-15 01:35:20 +00:00
buildmaster c7c6ea8df9 Sync docs from 2.1.x to gh-pages 2019-08-14 02:42:38 +00:00
buildmaster cf318ca2dd Sync docs from 2.0.x to gh-pages 2019-08-14 01:34:23 +00:00
buildmaster cbc0e32b08 Sync docs from 2.1.x to gh-pages 2019-08-13 02:43:35 +00:00
buildmaster c3be6a6df6 Sync docs from 2.0.x to gh-pages 2019-08-13 01:35:25 +00:00
buildmaster eb684edcdb Sync docs from 2.1.x to gh-pages 2019-08-12 02:43:24 +00:00
buildmaster ad58310aae Sync docs from 2.0.x to gh-pages 2019-08-12 01:35:24 +00:00
buildmaster 154525a974 Sync docs from 2.1.x to gh-pages 2019-08-11 02:43:35 +00:00
buildmaster bad5bb1800 Sync docs from 2.0.x to gh-pages 2019-08-11 01:35:22 +00:00
buildmaster fa6b3a3817 Sync docs from 2.1.x to gh-pages 2019-08-10 02:42:37 +00:00
buildmaster 4ee4e95981 Sync docs from 2.0.x to gh-pages 2019-08-10 01:34:40 +00:00
buildmaster 74bc3a313b Sync docs from 2.1.x to gh-pages 2019-08-09 02:42:45 +00:00
buildmaster 7d751e8749 Sync docs from 2.0.x to gh-pages 2019-08-09 01:34:47 +00:00
buildmaster bd2da4b2a2 Sync docs from 2.1.x to gh-pages 2019-08-08 02:42:54 +00:00
buildmaster db0635c7d0 Sync docs from 2.0.x to gh-pages 2019-08-08 01:34:39 +00:00
buildmaster 7cef734ba0 Sync docs from 2.1.x to gh-pages 2019-08-07 02:42:48 +00:00
buildmaster a0184e46bf Sync docs from 2.0.x to gh-pages 2019-08-07 01:34:36 +00:00
buildmaster 53e9bd9a18 Sync docs from 2.1.x to gh-pages 2019-08-06 02:42:47 +00:00
buildmaster 67e7d3e57c Sync docs from 2.0.x to gh-pages 2019-08-06 01:34:33 +00:00
buildmaster 5d4be547b6 Sync docs from master to gh-pages 2019-08-05 23:39:19 +00:00
Marcin Grzejszczak a6816ce087 Added the redirection link to the documentation 2019-08-05 22:40:03 +02:00
buildmaster f67d85a3d6 Sync docs from 2.1.x to gh-pages 2019-08-05 02:43:26 +00:00
buildmaster 985a9533bd Sync docs from 2.0.x to gh-pages 2019-08-05 01:35:11 +00:00
buildmaster 938a3f9c12 Sync docs from 2.1.x to gh-pages 2019-08-04 05:43:24 +00:00
buildmaster a1fb315ab3 Sync docs from 2.0.x to gh-pages 2019-08-04 01:35:17 +00:00
buildmaster c6f8c14eea Sync docs from 2.1.x to gh-pages 2019-08-03 02:43:26 +00:00
buildmaster 02edb36d1b Sync docs from 2.0.x to gh-pages 2019-08-03 01:35:25 +00:00
buildmaster db172a72ff Sync docs from 2.1.x to gh-pages 2019-08-02 02:43:23 +00:00
buildmaster d2900dbfbe Sync docs from 2.0.x to gh-pages 2019-08-02 01:35:23 +00:00
buildmaster 918d77bc2a Sync docs from 2.1.x to gh-pages 2019-08-01 02:43:27 +00:00
buildmaster b96761e136 Sync docs from 2.0.x to gh-pages 2019-08-01 01:35:24 +00:00
buildmaster f438f971a4 Sync docs from 2.1.x to gh-pages 2019-07-31 02:42:31 +00:00
buildmaster 7e542b5b68 Sync docs from 2.0.x to gh-pages 2019-07-31 01:34:29 +00:00
buildmaster 2f7b11daad Sync docs from 2.1.x to gh-pages 2019-07-30 02:43:35 +00:00
buildmaster 5a29ed3b88 Sync docs from 2.0.x to gh-pages 2019-07-30 01:35:28 +00:00
buildmaster 652afaa484 Sync docs from master to gh-pages 2019-07-29 13:08:32 +00:00
buildmaster 10d3638c13 Sync docs from 2.1.x to gh-pages 2019-07-29 12:53:55 +00:00
buildmaster 54481164c4 Sync docs from 2.0.x to gh-pages 2019-07-29 12:53:33 +00:00
buildmaster 36dda65b24 Sync docs from 2.1.x to gh-pages 2019-07-29 02:43:40 +00:00
buildmaster d965deae3c Sync docs from 2.0.x to gh-pages 2019-07-29 01:35:32 +00:00
buildmaster 382c7a7a02 Sync docs from 2.1.x to gh-pages 2019-07-28 02:42:39 +00:00
buildmaster 9c00ec661a Sync docs from 2.0.x to gh-pages 2019-07-28 01:34:30 +00:00
buildmaster 71ee9c2086 Sync docs from 2.1.x to gh-pages 2019-07-27 02:42:58 +00:00
buildmaster fdeb79de66 Sync docs from 2.0.x to gh-pages 2019-07-27 01:34:29 +00:00
buildmaster 327f73429e Sync docs from 2.1.x to gh-pages 2019-07-26 02:42:45 +00:00
buildmaster 0ade65b67a Sync docs from 2.0.x to gh-pages 2019-07-26 01:35:58 +00:00
buildmaster 8ee5f7e802 Sync docs from 2.1.x to gh-pages 2019-07-25 02:43:43 +00:00
buildmaster 8c2a1128c7 Sync docs from 2.0.x to gh-pages 2019-07-25 01:34:30 +00:00
buildmaster f2f9a1ab38 Sync docs from 2.1.x to gh-pages 2019-07-24 02:43:39 +00:00
buildmaster db83306de4 Sync docs from 2.0.x to gh-pages 2019-07-24 01:35:33 +00:00
buildmaster b89b281c7a Sync docs from 2.1.x to gh-pages 2019-07-23 02:44:01 +00:00
buildmaster 0b71a1c797 Sync docs from 2.0.x to gh-pages 2019-07-23 01:35:32 +00:00
buildmaster 30035f1741 Sync docs from master to gh-pages 2019-07-22 14:39:36 +00:00
buildmaster 39f856761c Sync docs from 2.1.x to gh-pages 2019-07-22 02:43:35 +00:00
buildmaster f143e1265b Sync docs from 2.0.x to gh-pages 2019-07-22 01:35:31 +00:00
buildmaster 74e2a4fd8f Sync docs from 2.1.x to gh-pages 2019-07-21 02:42:39 +00:00
buildmaster 5a67740b6c Sync docs from 2.0.x to gh-pages 2019-07-21 01:34:34 +00:00
buildmaster c073914e56 Sync docs from 2.1.x to gh-pages 2019-07-20 02:42:52 +00:00
buildmaster 02437a0209 Sync docs from 2.0.x to gh-pages 2019-07-20 01:34:35 +00:00
buildmaster 4d812c0905 Sync docs from 2.1.x to gh-pages 2019-07-19 02:42:36 +00:00
buildmaster bffa0495f7 Sync docs from 2.0.x to gh-pages 2019-07-19 01:34:34 +00:00
buildmaster 0c0c710ab0 Sync docs from 2.1.x to gh-pages 2019-07-18 02:43:37 +00:00
buildmaster 1854ab5959 Sync docs from 2.0.x to gh-pages 2019-07-18 01:35:27 +00:00
buildmaster f49f0cbf1e Sync docs from 2.1.x to gh-pages 2019-07-17 02:43:56 +00:00
buildmaster 6d598f95d1 Sync docs from 2.0.x to gh-pages 2019-07-17 01:35:51 +00:00
buildmaster dba93454de Sync docs from 2.1.x to gh-pages 2019-07-16 02:43:34 +00:00
buildmaster 4041b35eed Sync docs from 2.0.x to gh-pages 2019-07-16 01:35:29 +00:00
buildmaster 7106a5dac2 Sync docs from 2.1.x to gh-pages 2019-07-15 02:43:34 +00:00
buildmaster fa08638f49 Sync docs from 2.0.x to gh-pages 2019-07-15 01:35:27 +00:00
buildmaster 7b3ddb7f04 Sync docs from 2.1.x to gh-pages 2019-07-14 02:43:37 +00:00
buildmaster 82490647cd Sync docs from 2.0.x to gh-pages 2019-07-14 01:35:32 +00:00
buildmaster 203ba5fe54 Sync docs from 2.1.x to gh-pages 2019-07-13 02:46:36 +00:00
buildmaster 20a85f1e04 Sync docs from 2.0.x to gh-pages 2019-07-13 01:35:26 +00:00
buildmaster f6500611bc Sync docs from 2.1.x to gh-pages 2019-07-12 02:42:55 +00:00
buildmaster 0df30c3608 Sync docs from 2.0.x to gh-pages 2019-07-12 01:34:30 +00:00
buildmaster 4c7f3c7326 Sync docs from 2.1.x to gh-pages 2019-07-11 02:42:39 +00:00
buildmaster 2c3180ddcb Sync docs from 2.0.x to gh-pages 2019-07-11 01:34:29 +00:00
buildmaster 01899aaa32 Sync docs from 2.1.x to gh-pages 2019-07-10 02:42:35 +00:00
buildmaster 4b849e066f Sync docs from 2.0.x to gh-pages 2019-07-10 01:34:34 +00:00
buildmaster f6ffa84188 Sync docs from 2.1.x to gh-pages 2019-07-09 02:42:35 +00:00
buildmaster 09936941a3 Sync docs from 2.0.x to gh-pages 2019-07-09 01:34:35 +00:00
buildmaster 4be1fddeda Sync docs from 2.1.x to gh-pages 2019-07-08 02:42:40 +00:00
buildmaster 60fcf324ac Sync docs from 2.0.x to gh-pages 2019-07-08 01:34:29 +00:00
buildmaster 025b13c3b3 Sync docs from 2.1.x to gh-pages 2019-07-07 02:42:41 +00:00
buildmaster 93882a98b1 Sync docs from 2.0.x to gh-pages 2019-07-07 01:34:39 +00:00
buildmaster de7e49a6a0 Sync docs from 2.1.x to gh-pages 2019-07-06 02:42:40 +00:00
buildmaster eb149a99ce Sync docs from 2.0.x to gh-pages 2019-07-06 01:34:35 +00:00
buildmaster 86675b2d56 Sync docs from 2.0.x to gh-pages 2019-07-05 16:22:08 +00:00
buildmaster 4f2d7f7bd6 Sync docs from 2.1.x to gh-pages 2019-07-05 15:45:47 +00:00
buildmaster 29a839d0a7 Sync docs from 2.1.x to gh-pages 2019-07-04 02:42:41 +00:00
buildmaster 633a99e068 Sync docs from 2.0.x to gh-pages 2019-07-04 01:34:31 +00:00
buildmaster 6a21be9ba5 Sync docs from 2.1.x to gh-pages 2019-07-03 02:42:45 +00:00
buildmaster 974fa93652 Sync docs from 2.0.x to gh-pages 2019-07-03 01:34:27 +00:00
buildmaster 0d20818629 Sync docs from 2.1.x to gh-pages 2019-07-02 02:42:38 +00:00
buildmaster 2c0a8de358 Sync docs from 2.0.x to gh-pages 2019-07-02 01:36:12 +00:00
buildmaster d56167ae3c Sync docs from 2.0.x to gh-pages 2019-07-01 04:40:59 +00:00
buildmaster d22080d137 Sync docs from 2.1.x to gh-pages 2019-07-01 02:42:42 +00:00
buildmaster 3a0d079ae9 Sync docs from 2.1.x to gh-pages 2019-06-30 02:42:42 +00:00
buildmaster cc4b141d99 Sync docs from 2.0.x to gh-pages 2019-06-30 01:37:18 +00:00
buildmaster c16c46cba5 Sync docs from 2.1.x to gh-pages 2019-06-29 02:42:40 +00:00
buildmaster 4cda105b4f Sync docs from 2.0.x to gh-pages 2019-06-29 01:37:51 +00:00
buildmaster 5e5a52971b Sync docs from 2.1.x to gh-pages 2019-06-28 14:42:41 +00:00
buildmaster c250530766 Sync docs from master to gh-pages 2019-06-28 14:38:49 +00:00
buildmaster c7549d807d Sync docs from 2.0.x to gh-pages 2019-06-28 13:34:44 +00:00
buildmaster 2ed575c796 Sync docs from 2.1.x to gh-pages 2019-06-06 02:42:35 +00:00
buildmaster 21d0bd7fd4 Sync docs from 2.0.x to gh-pages 2019-06-06 01:34:33 +00:00
buildmaster ec5e03494f Sync docs from 2.1.x to gh-pages 2019-06-05 02:42:35 +00:00
buildmaster 5614755df0 Sync docs from 2.0.x to gh-pages 2019-06-05 01:34:29 +00:00
buildmaster ce3809cb06 Sync docs from 2.1.x to gh-pages 2019-06-04 02:42:40 +00:00
buildmaster 5163e1d7bb Sync docs from 2.0.x to gh-pages 2019-06-04 01:34:34 +00:00
buildmaster 06164c638c Sync docs from master to gh-pages 2019-06-03 15:13:56 +00:00
buildmaster 10e2fabcf1 Sync docs from 2.1.x to gh-pages 2019-06-03 06:10:28 +00:00
buildmaster a5ed6b5709 Sync docs from 2.0.x to gh-pages 2019-06-03 01:34:29 +00:00
buildmaster 126fe6d93a Sync docs from 2.1.x to gh-pages 2019-06-02 02:42:36 +00:00
buildmaster 7ce0826c42 Sync docs from 2.0.x to gh-pages 2019-06-02 01:34:34 +00:00
buildmaster 5c930a10d0 Sync docs from 2.1.x to gh-pages 2019-06-01 02:42:36 +00:00
buildmaster da87a88a1e Sync docs from 2.0.x to gh-pages 2019-06-01 01:34:29 +00:00
buildmaster 1c854c12dd Sync docs from 2.1.x to gh-pages 2019-05-31 02:42:38 +00:00
buildmaster 0ac3b43717 Sync docs from 2.0.x to gh-pages 2019-05-31 01:34:32 +00:00
buildmaster 268fb26921 Sync docs from 2.1.x to gh-pages 2019-05-30 02:42:36 +00:00
buildmaster 59d1b80e6a Sync docs from 2.0.x to gh-pages 2019-05-30 01:34:30 +00:00
buildmaster 5d6913cfab Sync docs from 2.1.x to gh-pages 2019-05-29 02:42:37 +00:00
buildmaster 3676e8cc95 Sync docs from 2.0.x to gh-pages 2019-05-29 01:34:31 +00:00
buildmaster 2a2419ca4e Sync docs from 2.1.x to gh-pages 2019-05-28 02:42:38 +00:00
buildmaster 036cacf961 Sync docs from 2.0.x to gh-pages 2019-05-28 01:34:32 +00:00
buildmaster 1ee25b4456 Sync docs from 2.1.x to gh-pages 2019-05-27 02:42:37 +00:00
buildmaster 18d8da8777 Sync docs from 2.0.x to gh-pages 2019-05-27 01:34:33 +00:00
buildmaster 3060d3af5d Sync docs from 2.1.x to gh-pages 2019-05-26 02:42:38 +00:00
buildmaster 577997f54a Sync docs from 2.0.x to gh-pages 2019-05-26 01:34:31 +00:00
buildmaster 5a3da86588 Sync docs from 2.1.x to gh-pages 2019-05-25 02:43:10 +00:00
buildmaster c0b1b35d09 Sync docs from 2.0.x to gh-pages 2019-05-25 01:37:39 +00:00
buildmaster 7177f4fd23 Sync docs from 2.1.x to gh-pages 2019-05-24 02:42:37 +00:00
buildmaster 49a23a7288 Sync docs from 2.0.x to gh-pages 2019-05-24 01:34:32 +00:00
buildmaster 94202ba7e1 Sync docs from 2.1.x to gh-pages 2019-05-23 02:42:40 +00:00
buildmaster dde2371103 Sync docs from 2.0.x to gh-pages 2019-05-23 01:37:01 +00:00
buildmaster 652d607337 Sync docs from 2.1.x to gh-pages 2019-05-22 02:42:40 +00:00
buildmaster dcf569b705 Sync docs from 2.0.x to gh-pages 2019-05-22 01:34:32 +00:00
buildmaster 12442b3327 Sync docs from 2.1.x to gh-pages 2019-05-21 02:42:38 +00:00
buildmaster f7ecdae611 Sync docs from 2.0.x to gh-pages 2019-05-21 01:34:33 +00:00
buildmaster 88785a8d29 Sync docs from 2.1.x to gh-pages 2019-05-20 02:42:40 +00:00
buildmaster 0e8cdf11c4 Sync docs from 2.0.x to gh-pages 2019-05-20 01:34:32 +00:00
buildmaster d95cad6ef9 Sync docs from 2.1.x to gh-pages 2019-05-19 02:42:37 +00:00
buildmaster 50175976e6 Sync docs from 2.0.x to gh-pages 2019-05-19 01:34:32 +00:00
buildmaster f512d61648 Sync docs from 2.1.x to gh-pages 2019-05-18 02:42:43 +00:00
buildmaster 5e38b8f10e Sync docs from 2.0.x to gh-pages 2019-05-18 01:34:32 +00:00
buildmaster be1d43bead Sync docs from 2.1.x to gh-pages 2019-05-17 02:42:36 +00:00
buildmaster 2978484b8e Sync docs from 2.0.x to gh-pages 2019-05-17 01:34:32 +00:00
buildmaster f458b90ad2 Sync docs from 2.1.x to gh-pages 2019-05-16 02:42:41 +00:00
buildmaster 80bb360311 Sync docs from 2.0.x to gh-pages 2019-05-16 01:34:32 +00:00
buildmaster 8a26a03066 Sync docs from 2.1.x to gh-pages 2019-05-15 02:42:40 +00:00
buildmaster 006e724dc0 Sync docs from 2.0.x to gh-pages 2019-05-15 01:34:32 +00:00
buildmaster 222e07f9f3 Sync docs from 2.1.x to gh-pages 2019-05-14 02:42:37 +00:00
buildmaster afa3ac7688 Sync docs from 2.0.x to gh-pages 2019-05-14 01:34:32 +00:00
buildmaster ed354ef654 Sync docs from 2.1.x to gh-pages 2019-05-13 02:43:11 +00:00
buildmaster 44ec6137ff Sync docs from 2.0.x to gh-pages 2019-05-13 01:34:33 +00:00
buildmaster 793ea6bc2b Sync docs from 2.1.x to gh-pages 2019-05-12 02:42:35 +00:00
buildmaster c11f6959b1 Sync docs from 2.0.x to gh-pages 2019-05-12 01:34:32 +00:00
buildmaster 2519a72a69 Sync docs from 2.1.x to gh-pages 2019-05-11 02:42:36 +00:00
buildmaster bc28792be4 Sync docs from 2.0.x to gh-pages 2019-05-11 01:35:17 +00:00
buildmaster 66d21f74c9 Sync docs from 2.1.x to gh-pages 2019-05-10 02:42:37 +00:00
buildmaster 732b1546b2 Sync docs from 2.0.x to gh-pages 2019-05-10 01:34:32 +00:00
buildmaster dbcba1d4db Sync docs from 2.1.x to gh-pages 2019-05-09 02:42:36 +00:00
buildmaster cd341bd705 Sync docs from 2.0.x to gh-pages 2019-05-09 01:34:31 +00:00
buildmaster 9a1c1a388b Sync docs from 2.1.x to gh-pages 2019-05-08 02:42:36 +00:00
buildmaster 2a724a44f3 Sync docs from 2.0.x to gh-pages 2019-05-08 01:34:29 +00:00
buildmaster b9c68bd13a Sync docs from 2.1.x to gh-pages 2019-05-07 02:42:39 +00:00
buildmaster fc93edfbbe Sync docs from 2.0.x to gh-pages 2019-05-07 01:34:34 +00:00
buildmaster a182de6ad8 Sync docs from 2.1.x to gh-pages 2019-05-06 02:42:39 +00:00
buildmaster 7ecb515ecf Sync docs from 2.0.x to gh-pages 2019-05-06 01:34:30 +00:00
buildmaster fcc3bdd407 Sync docs from 2.1.x to gh-pages 2019-05-05 02:42:43 +00:00
buildmaster 5eb9bfa022 Sync docs from 2.0.x to gh-pages 2019-05-05 01:34:32 +00:00
buildmaster b541b046fe Sync docs from 2.1.x to gh-pages 2019-05-04 02:42:38 +00:00
buildmaster c007794e1f Sync docs from 2.0.x to gh-pages 2019-05-04 01:34:32 +00:00
buildmaster 74b96dd203 Sync docs from 2.1.x to gh-pages 2019-05-03 02:42:37 +00:00
buildmaster 1bb08485fe Sync docs from 2.0.x to gh-pages 2019-05-03 01:34:32 +00:00
buildmaster da3810b3fb Sync docs from 2.1.x to gh-pages 2019-05-02 02:42:44 +00:00
buildmaster dcebd71620 Sync docs from 2.0.x to gh-pages 2019-05-02 01:34:30 +00:00
buildmaster d89ae015dc Sync docs from 2.1.x to gh-pages 2019-05-01 02:42:35 +00:00
buildmaster ab85f1e4f7 Sync docs from 2.0.x to gh-pages 2019-05-01 01:34:33 +00:00
buildmaster 4611f953d8 Sync docs from 2.1.x to gh-pages 2019-04-30 02:42:42 +00:00
buildmaster b5150bd1d3 Sync docs from 2.0.x to gh-pages 2019-04-30 01:34:31 +00:00
buildmaster 8b7255e78d Sync docs from 2.1.x to gh-pages 2019-04-29 02:42:41 +00:00
buildmaster 17c1540629 Sync docs from 2.0.x to gh-pages 2019-04-29 01:34:29 +00:00
buildmaster 1e84f1fb30 Sync docs from 2.1.x to gh-pages 2019-04-28 02:42:37 +00:00
buildmaster 38cd90f1dc Sync docs from 2.0.x to gh-pages 2019-04-28 01:34:33 +00:00
buildmaster 6070604de7 Sync docs from 2.1.x to gh-pages 2019-04-27 02:42:41 +00:00
buildmaster e4357ef0b7 Sync docs from 2.0.x to gh-pages 2019-04-27 01:34:30 +00:00
buildmaster 5d5c462592 Sync docs from 2.1.x to gh-pages 2019-04-26 02:42:37 +00:00
buildmaster 1b36955e44 Sync docs from 2.0.x to gh-pages 2019-04-26 01:34:34 +00:00
buildmaster 3c5758bf6d Sync docs from 2.1.x to gh-pages 2019-04-25 02:42:39 +00:00
buildmaster 64aedd9b1e Sync docs from 2.0.x to gh-pages 2019-04-25 01:34:29 +00:00
buildmaster 501ef5273d Sync docs from 2.1.x to gh-pages 2019-04-24 02:42:36 +00:00
buildmaster a21e7b9af1 Sync docs from 2.0.x to gh-pages 2019-04-24 01:34:46 +00:00
buildmaster 789c386109 Sync docs from 2.1.x to gh-pages 2019-04-23 02:42:36 +00:00
buildmaster 592f4f8188 Sync docs from 2.0.x to gh-pages 2019-04-23 01:34:33 +00:00
buildmaster e64c54d386 Sync docs from 2.1.x to gh-pages 2019-04-22 02:42:37 +00:00
buildmaster 30a314b489 Sync docs from 2.0.x to gh-pages 2019-04-22 01:34:33 +00:00
buildmaster dd68f8ea86 Sync docs from 2.1.x to gh-pages 2019-04-21 02:42:40 +00:00
buildmaster a076848690 Sync docs from 2.0.x to gh-pages 2019-04-21 01:34:33 +00:00
buildmaster 792f47f51d Sync docs from 2.1.x to gh-pages 2019-04-20 02:42:37 +00:00
buildmaster e69134c5d1 Sync docs from 2.0.x to gh-pages 2019-04-20 01:34:29 +00:00
buildmaster 621f5bc04d Sync docs from 2.1.x to gh-pages 2019-04-19 02:42:36 +00:00
buildmaster 312dce9529 Sync docs from 2.0.x to gh-pages 2019-04-19 01:34:38 +00:00
buildmaster a5273ac165 Sync docs from 2.1.x to gh-pages 2019-04-18 02:42:37 +00:00
buildmaster b0844f4852 Sync docs from 2.0.x to gh-pages 2019-04-18 01:34:34 +00:00
buildmaster 392791c3c4 Sync docs from 2.1.x to gh-pages 2019-04-17 02:42:39 +00:00
buildmaster 5df463b8e4 Sync docs from 2.0.x to gh-pages 2019-04-17 01:34:31 +00:00
buildmaster 1c1a2dc05b Sync docs from 2.1.x to gh-pages 2019-04-16 02:42:42 +00:00
buildmaster 5c45a1cbce Sync docs from 2.0.x to gh-pages 2019-04-16 01:34:33 +00:00
buildmaster 1ffecf6106 Sync docs from 2.1.x to gh-pages 2019-04-15 02:42:41 +00:00
buildmaster fc8221601a Sync docs from 2.0.x to gh-pages 2019-04-15 01:34:33 +00:00
buildmaster 9579fa6eaf Sync docs from 2.1.x to gh-pages 2019-04-14 02:42:36 +00:00
buildmaster a740b2831c Sync docs from 2.0.x to gh-pages 2019-04-14 01:34:33 +00:00
buildmaster e0581c4ac8 Sync docs from 2.1.x to gh-pages 2019-04-13 02:42:40 +00:00
buildmaster c862085077 Sync docs from 2.0.x to gh-pages 2019-04-13 01:34:29 +00:00
buildmaster 4ab86972c6 Sync docs from 2.1.x to gh-pages 2019-04-12 02:42:40 +00:00
buildmaster e3fd1b8936 Sync docs from 2.0.x to gh-pages 2019-04-12 01:34:34 +00:00
buildmaster d0236574ea Sync docs from 2.1.x to gh-pages 2019-04-11 02:42:39 +00:00
buildmaster 6f02e09991 Sync docs from 2.0.x to gh-pages 2019-04-11 01:34:33 +00:00
buildmaster ae03a88899 Sync docs from 2.1.x to gh-pages 2019-04-10 02:42:43 +00:00
buildmaster 332e025424 Sync docs from 2.0.x to gh-pages 2019-04-10 01:34:33 +00:00
buildmaster 2447afea52 Sync docs from 2.1.x to gh-pages 2019-04-09 02:42:36 +00:00
buildmaster cd856d2721 Sync docs from 2.0.x to gh-pages 2019-04-09 01:34:33 +00:00
buildmaster 86db8eb231 Sync docs from 2.1.x to gh-pages 2019-04-08 02:42:41 +00:00
buildmaster 8864dd9679 Sync docs from 2.0.x to gh-pages 2019-04-08 01:34:29 +00:00
buildmaster b67fb6fc1b Sync docs from 2.1.x to gh-pages 2019-04-07 02:42:39 +00:00
buildmaster 7ee04dfdc7 Sync docs from 2.0.x to gh-pages 2019-04-07 01:34:33 +00:00
buildmaster 46b4a99a50 Sync docs from 2.1.x to gh-pages 2019-04-06 02:42:36 +00:00
buildmaster db083c75b2 Sync docs from 2.0.x to gh-pages 2019-04-06 01:34:29 +00:00
buildmaster 91c8e16aae Sync docs from 2.1.x to gh-pages 2019-04-05 02:42:37 +00:00
buildmaster c6ed6d85b0 Sync docs from 2.0.x to gh-pages 2019-04-05 01:34:33 +00:00
buildmaster e9618d034a Sync docs from 2.1.x to gh-pages 2019-04-04 02:42:38 +00:00
buildmaster fa35dbde53 Sync docs from 2.0.x to gh-pages 2019-04-04 01:34:32 +00:00
buildmaster 6bead4859f Sync docs from 2.1.x to gh-pages 2019-04-03 02:42:41 +00:00
buildmaster e0454ca421 Sync docs from 2.0.x to gh-pages 2019-04-03 01:34:33 +00:00
buildmaster 9a433c4872 Sync docs from 2.1.x to gh-pages 2019-04-02 02:42:37 +00:00
buildmaster 879279b781 Sync docs from 2.0.x to gh-pages 2019-04-02 01:34:29 +00:00
buildmaster 45aea5eee4 Sync docs from 2.1.x to gh-pages 2019-04-01 02:42:38 +00:00
buildmaster 71b5979a60 Sync docs from 2.0.x to gh-pages 2019-04-01 01:34:32 +00:00
buildmaster 54c04dc485 Sync docs from 2.1.x to gh-pages 2019-03-31 02:42:41 +00:00
buildmaster d8f09f5ddf Sync docs from 2.0.x to gh-pages 2019-03-31 01:34:29 +00:00
buildmaster c1160c14b9 Sync docs from 2.1.x to gh-pages 2019-03-30 02:42:36 +00:00
buildmaster 6742d15a0f Sync docs from 2.0.x to gh-pages 2019-03-30 01:34:29 +00:00
Olga Maciaszek-Sharma 0c01381b4b Stop building gh-pages on circle-ci. 2019-03-29 15:12:41 +01:00
buildmaster 743d4c7b97 Sync docs from 2.1.x to gh-pages 2019-03-29 02:42:41 +00:00
buildmaster d2fad6cfdc Sync docs from 2.0.x to gh-pages 2019-03-29 01:34:30 +00:00
buildmaster bfa562c1d3 Sync docs from master to gh-pages 2019-03-28 20:15:56 +00:00
buildmaster ea5b5c9103 Sync docs from 2.0.x to gh-pages 2019-03-28 20:07:41 +00:00
buildmaster 1a9f13d225 Sync docs from 2.1.x to gh-pages 2019-03-28 19:58:36 +00:00
buildmaster 844e2a5034 Sync docs from 2.0.x to gh-pages 2019-03-28 19:34:31 +00:00
Spring Operator 7e3b22430a URL Cleanup (#167)
This commit updates URLs to prefer the https protocol. Redirects are not followed to avoid accidentally expanding intentionally shortened URLs (i.e. if using a URL shortener).

# HTTP URLs that Could Not Be Fixed
These URLs were unable to be fixed. Please review them to see if they can be manually resolved.

* [ ] http://erik.eae.net/archives/2007/07/27/18.54.15/ (200) with 1 occurrences could not be migrated:
   ([https](https://erik.eae.net/archives/2007/07/27/18.54.15/) result SSLHandshakeException).
* [ ] http://javascript.nwbox.com/IEContentLoaded/ (200) with 1 occurrences could not be migrated:
   ([https](https://javascript.nwbox.com/IEContentLoaded/) result SSLHandshakeException).
* [ ] http://blindsignals.com/index.php/2009/07/jquery-delay/ (301) with 1 occurrences could not be migrated:
   ([https](https://blindsignals.com/index.php/2009/07/jquery-delay/) result SSLHandshakeException).

# Fixed URLs

## Fixed But Review Recommended
These URLs were fixed, but the https status was not OK. However, the https status was the same as the http request or http redirected to an https URL, so they were migrated. Your review is recommended.

* [ ] http://fontawesome.io (301) with 4 occurrences migrated to:
  https://fontawesome.com?from=io ([https](https://fontawesome.io) result AnnotatedConnectException).
* [ ] http://jsperf.com/getall-vs-sizzle/2 (301) with 1 occurrences migrated to:
  https://jsperf.com/getall-vs-sizzle/2 ([https](https://jsperf.com/getall-vs-sizzle/2) result ReadTimeoutException).
* [ ] http://zenorocha.mit-license.org (301) with 1 occurrences migrated to:
  https://zenorocha.mit-license.org/ ([https](https://zenorocha.mit-license.org) result NullPointerException).
* [ ] http://wiki.ecmascript.org/doku.php?id=harmony:egal (ConnectTimeoutException) with 1 occurrences migrated to:
  https://wiki.ecmascript.org/doku.php?id=harmony:egal ([https](https://wiki.ecmascript.org/doku.php?id=harmony:egal) result ConnectTimeoutException).
* [ ] http://www.w3.org/TR/html4/loose.dtd (ReadTimeoutException) with 1 occurrences migrated to:
  https://www.w3.org/TR/html4/loose.dtd ([https](https://www.w3.org/TR/html4/loose.dtd) result ReadTimeoutException).
* [ ] http://fluidproject.org/blog/2008/01/09/getting-setting-and-removing-tabindex-values-with-javascript/ (301) with 1 occurrences migrated to:
  https://fluidproject.org/blog/2008/01/09/getting-setting-and-removing-tabindex-values-with-javascript/ ([https](https://fluidproject.org/blog/2008/01/09/getting-setting-and-removing-tabindex-values-with-javascript/) result 404).
* [ ] http://github.com/sprinframework (301) with 4 occurrences migrated to:
  https://github.com/sprinframework ([https](https://github.com/sprinframework) result 404).
* [ ] http://github.com/spring_hadoop (301) with 4 occurrences migrated to:
  https://github.com/spring_hadoop ([https](https://github.com/spring_hadoop) result 404).
* [ ] http://json.org/json2.js (404) with 1 occurrences migrated to:
  https://json.org/json2.js ([https](https://json.org/json2.js) result 404).
* [ ] http://pivotal.github.com/jasmine (404) with 1 occurrences migrated to:
  https://pivotal.github.com/jasmine ([https](https://pivotal.github.com/jasmine) result 404).

## Fixed Success
These URLs were switched to an https URL with a 2xx status. While the status was successful, your review is still recommended.

* [ ] http://backbonejs.org with 1 occurrences migrated to:
  https://backbonejs.org ([https](https://backbonejs.org) result 200).
* [ ] http://bugs.jquery.com/ticket/12282 with 1 occurrences migrated to:
  https://bugs.jquery.com/ticket/12282 ([https](https://bugs.jquery.com/ticket/12282) result 200).
* [ ] http://bugs.jquery.com/ticket/12359 with 1 occurrences migrated to:
  https://bugs.jquery.com/ticket/12359 ([https](https://bugs.jquery.com/ticket/12359) result 200).
* [ ] http://bugs.jquery.com/ticket/13378 with 1 occurrences migrated to:
  https://bugs.jquery.com/ticket/13378 ([https](https://bugs.jquery.com/ticket/13378) result 200).
* [ ] http://cdnjs.cloudflare.com/ajax/libs/zepto/1.2.0/zepto.min.js with 3 occurrences migrated to:
  https://cdnjs.cloudflare.com/ajax/libs/zepto/1.2.0/zepto.min.js ([https](https://cdnjs.cloudflare.com/ajax/libs/zepto/1.2.0/zepto.min.js) result 200).
* [ ] http://creativecommons.org/licenses/by/3.0/ with 2 occurrences migrated to:
  https://creativecommons.org/licenses/by/3.0/ ([https](https://creativecommons.org/licenses/by/3.0/) result 200).
* [ ] http://diveintohtml5.info/history.html with 1 occurrences migrated to:
  https://diveintohtml5.info/history.html ([https](https://diveintohtml5.info/history.html) result 200).
* [ ] http://docs.spring.io/spring-data/jpa/docs/1.3.4.RELEASE/api/ with 1 occurrences migrated to:
  https://docs.spring.io/spring-data/jpa/docs/1.3.4.RELEASE/api/ ([https](https://docs.spring.io/spring-data/jpa/docs/1.3.4.RELEASE/api/) result 200).
* [ ] http://docs.spring.io/spring-data/jpa/docs/1.3.4.RELEASE/reference/html/ with 1 occurrences migrated to:
  https://docs.spring.io/spring-data/jpa/docs/1.3.4.RELEASE/reference/html/ ([https](https://docs.spring.io/spring-data/jpa/docs/1.3.4.RELEASE/reference/html/) result 200).
* [ ] http://docs.spring.io/spring-data/jpa/docs/1.4.0.RC1/api/ with 1 occurrences migrated to:
  https://docs.spring.io/spring-data/jpa/docs/1.4.0.RC1/api/ ([https](https://docs.spring.io/spring-data/jpa/docs/1.4.0.RC1/api/) result 200).
* [ ] http://docs.spring.io/spring-data/jpa/docs/1.4.0.RC1/reference/html/ with 1 occurrences migrated to:
  https://docs.spring.io/spring-data/jpa/docs/1.4.0.RC1/reference/html/ ([https](https://docs.spring.io/spring-data/jpa/docs/1.4.0.RC1/reference/html/) result 200).
* [ ] http://github.com/spring-cloud/spring-cloud-openfeign with 1 occurrences migrated to:
  https://github.com/spring-cloud/spring-cloud-openfeign ([https](https://github.com/spring-cloud/spring-cloud-openfeign) result 200).
* [ ] http://github.com/spring-projects/gh-pages with 1 occurrences migrated to:
  https://github.com/spring-projects/gh-pages ([https](https://github.com/spring-projects/gh-pages) result 200).
* [ ] http://grigio.org with 1 occurrences migrated to:
  https://grigio.org ([https](https://grigio.org) result 200).
* [ ] http://imgs.mi9.com/uploads/landscape/2101/beautiful-leaf-wallpapers_1280x960_28083.jpg with 1 occurrences migrated to:
  https://imgs.mi9.com/uploads/landscape/2101/beautiful-leaf-wallpapers_1280x960_28083.jpg ([https](https://imgs.mi9.com/uploads/landscape/2101/beautiful-leaf-wallpapers_1280x960_28083.jpg) result 200).
* [ ] http://jekyllrb.com with 1 occurrences migrated to:
  https://jekyllrb.com ([https](https://jekyllrb.com) result 200).
* [ ] http://jquery.com/ with 1 occurrences migrated to:
  https://jquery.com/ ([https](https://jquery.com/) result 200).
* [ ] http://nn.mit-license.org/ with 1 occurrences migrated to:
  https://nn.mit-license.org/ ([https](https://nn.mit-license.org/) result 200).
* [ ] http://opensource.org/licenses/mit-license.html with 2 occurrences migrated to:
  https://opensource.org/licenses/mit-license.html ([https](https://opensource.org/licenses/mit-license.html) result 200).
* [ ] http://pages.github.com/ with 1 occurrences migrated to:
  https://pages.github.com/ ([https](https://pages.github.com/) result 200).
* [ ] http://projects.spring.io/spring-cloud/ with 7 occurrences migrated to:
  https://projects.spring.io/spring-cloud/ ([https](https://projects.spring.io/spring-cloud/) result 200).
* [ ] http://rubygems.org with 1 occurrences migrated to:
  https://rubygems.org ([https](https://rubygems.org) result 200).
* [ ] http://rubygems.org/ with 1 occurrences migrated to:
  https://rubygems.org/ ([https](https://rubygems.org/) result 200).
* [ ] http://silviomoreto.github.io/bootstrap-select/ with 2 occurrences migrated to:
  https://silviomoreto.github.io/bootstrap-select/ ([https](https://silviomoreto.github.io/bootstrap-select/) result 200).
* [ ] http://sizzlejs.com/ with 2 occurrences migrated to:
  https://sizzlejs.com/ ([https](https://sizzlejs.com/) result 200).
* [ ] http://spring.io/guides/gs/gradle/ with 1 occurrences migrated to:
  https://spring.io/guides/gs/gradle/ ([https](https://spring.io/guides/gs/gradle/) result 200).
* [ ] http://spring.io/guides/gs/maven/ with 1 occurrences migrated to:
  https://spring.io/guides/gs/maven/ ([https](https://spring.io/guides/gs/maven/) result 200).
* [ ] http://spring.io/projects/spring-cloud-openfeign with 4 occurrences migrated to:
  https://spring.io/projects/spring-cloud-openfeign ([https](https://spring.io/projects/spring-cloud-openfeign) result 200).
* [ ] http://stackoverflow.com/questions/tagged/spring-cloud with 1 occurrences migrated to:
  https://stackoverflow.com/questions/tagged/spring-cloud ([https](https://stackoverflow.com/questions/tagged/spring-cloud) result 200).
* [ ] http://stackoverflow.com/questions/tagged/spring-data-jpa with 1 occurrences migrated to:
  https://stackoverflow.com/questions/tagged/spring-data-jpa ([https](https://stackoverflow.com/questions/tagged/spring-data-jpa) result 200).
* [ ] http://twitter.com/byscuits with 2 occurrences migrated to:
  https://twitter.com/byscuits ([https](https://twitter.com/byscuits) result 200).
* [ ] http://twitter.com/fontawesome with 2 occurrences migrated to:
  https://twitter.com/fontawesome ([https](https://twitter.com/fontawesome) result 200).
* [ ] http://underscorejs.org with 1 occurrences migrated to:
  https://underscorejs.org ([https](https://underscorejs.org) result 200).
* [ ] http://kyruus.com (301) with 2 occurrences migrated to:
  https://www.kyruus.com/ ([https](https://kyruus.com) result 200).
* [ ] http://www.w3.org/TR/2003/WD-DOM-Level-3-Events-20030331/ecma-script-binding.html with 1 occurrences migrated to:
  https://www.w3.org/TR/2003/WD-DOM-Level-3-Events-20030331/ecma-script-binding.html ([https](https://www.w3.org/TR/2003/WD-DOM-Level-3-Events-20030331/ecma-script-binding.html) result 200).
* [ ] http://www.w3.org/TR/2011/REC-css3-selectors-20110929/ with 2 occurrences migrated to:
  https://www.w3.org/TR/2011/REC-css3-selectors-20110929/ ([https](https://www.w3.org/TR/2011/REC-css3-selectors-20110929/) result 200).
* [ ] http://www.w3.org/TR/CSS21/syndata.html with 2 occurrences migrated to:
  https://www.w3.org/TR/CSS21/syndata.html ([https](https://www.w3.org/TR/CSS21/syndata.html) result 200).
* [ ] http://www.w3.org/TR/selectors/ with 4 occurrences migrated to:
  https://www.w3.org/TR/selectors/ ([https](https://www.w3.org/TR/selectors/) result 200).
* [ ] http://dev.w3.org/csswg/cssom/ with 1 occurrences migrated to:
  https://dev.w3.org/csswg/cssom/ ([https](https://dev.w3.org/csswg/cssom/) result 301).
* [ ] http://docs.python.org/library/functions.html with 1 occurrences migrated to:
  https://docs.python.org/library/functions.html ([https](https://docs.python.org/library/functions.html) result 301).
* [ ] http://forum.spring.io/forum/spring-projects/data with 1 occurrences migrated to:
  https://forum.spring.io/forum/spring-projects/data ([https](https://forum.spring.io/forum/spring-projects/data) result 301).
* [ ] http://github.com/SpringSource/spring-data-jpa with 1 occurrences migrated to:
  https://github.com/SpringSource/spring-data-jpa ([https](https://github.com/SpringSource/spring-data-jpa) result 301).
* [ ] http://github.com/pivotal/jasmine-ajax with 1 occurrences migrated to:
  https://github.com/pivotal/jasmine-ajax ([https](https://github.com/pivotal/jasmine-ajax) result 301).
* [ ] http://helpful.knobs-dials.com/index.php/Component_returned_failure_code:_0x80040111_ with 1 occurrences migrated to:
  https://helpful.knobs-dials.com/index.php/Component_returned_failure_code:_0x80040111_ ([https](https://helpful.knobs-dials.com/index.php/Component_returned_failure_code:_0x80040111_) result 301).
* [ ] http://jira.springsource.org/browse/DATAJPA with 1 occurrences migrated to:
  https://jira.springsource.org/browse/DATAJPA ([https](https://jira.springsource.org/browse/DATAJPA) result 301).
* [ ] http://jquery.org/license with 2 occurrences migrated to:
  https://jquery.org/license ([https](https://jquery.org/license) result 301).
* [ ] http://projects.spring.io/spring-data-jpa with 1 occurrences migrated to:
  https://projects.spring.io/spring-data-jpa ([https](https://projects.spring.io/spring-data-jpa) result 301).
* [ ] http://spring-projects.github.io/ with 1 occurrences migrated to:
  https://spring-projects.github.io/ ([https](https://spring-projects.github.io/) result 301).
* [ ] http://twitter.github.com/bootstrap/javascript.html with 13 occurrences migrated to:
  https://twitter.github.com/bootstrap/javascript.html ([https](https://twitter.github.com/bootstrap/javascript.html) result 301).
* [ ] http://www.modernizr.com/ with 1 occurrences migrated to:
  https://www.modernizr.com/ ([https](https://www.modernizr.com/) result 301).
* [ ] http://www.spring.io with 8 occurrences migrated to:
  https://www.spring.io ([https](https://www.spring.io) result 301).
* [ ] http://www.w3.org/TR/css3-selectors/ with 2 occurrences migrated to:
  https://www.w3.org/TR/css3-selectors/ ([https](https://www.w3.org/TR/css3-selectors/) result 301).
* [ ] http://www.w3.org/TR/css3-syntax/ with 1 occurrences migrated to:
  https://www.w3.org/TR/css3-syntax/ ([https](https://www.w3.org/TR/css3-syntax/) result 301).
* [ ] http://msdn.microsoft.com/en-us/library/ms536429%28VS.85%29.aspx with 2 occurrences migrated to:
  https://msdn.microsoft.com/en-us/library/ms536429%28VS.85%29.aspx ([https](https://msdn.microsoft.com/en-us/library/ms536429%28VS.85%29.aspx) result 302).
* [ ] http://repo.spring.io/milestone with 4 occurrences migrated to:
  https://repo.spring.io/milestone ([https](https://repo.spring.io/milestone) result 302).
* [ ] http://scripts.sil.org/OFL with 2 occurrences migrated to:
  https://scripts.sil.org/OFL ([https](https://scripts.sil.org/OFL) result 302).
* [ ] http://weblogs.java.net/blog/driscoll/archive/2009/09/08/eval-javascript-global-context with 1 occurrences migrated to:
  https://weblogs.java.net/blog/driscoll/archive/2009/09/08/eval-javascript-global-context ([https](https://weblogs.java.net/blog/driscoll/archive/2009/09/08/eval-javascript-global-context) result 302).

# Ignored
These URLs were intentionally ignored.

* http://PROD-SVC with 14 occurrences
* http://docbook.org/ns/docbook with 752 occurrences
* http://localhost:4000/spring-xyz/ with 1 occurrences
* http://www with 1 occurrences
* http://www.w3.org/1999/xhtml with 2 occurrences
* http://www.w3.org/1999/xlink with 1 occurrences
* http://www.w3.org/2000/svg with 1 occurrences
2019-03-28 14:03:39 -04:00
Spring Operator aad55b79d3 URL Cleanup (#164)
This commit updates URLs to prefer the https protocol. Redirects are not followed to avoid accidentally expanding intentionally shortened URLs (i.e. if using a URL shortener).

# Fixed URLs

## Fixed Success
These URLs were switched to an https URL with a 2xx status. While the status was successful, your review is still recommended.

* [ ] http://projects.spring.io/spring-cloud/ with 3 occurrences migrated to:
  https://projects.spring.io/spring-cloud/ ([https](https://projects.spring.io/spring-cloud/) result 200).
* [ ] http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd with 1 occurrences migrated to:
  https://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd ([https](https://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd) result 200).

# Ignored
These URLs were intentionally ignored.

* http://PROD-SVC with 6 occurrences
* http://docbook.org/ns/docbook with 3 occurrences
* http://www.w3.org/1999/xlink with 3 occurrences
* http://www.w3.org/2000/svg with 1 occurrences
2019-03-28 14:03:11 -04:00
buildmaster ff4e3b499d Sync docs from 2.1.x to gh-pages 2019-03-28 02:42:42 +00:00
buildmaster e794d6f6d1 Sync docs from 2.0.x to gh-pages 2019-03-28 01:34:30 +00:00
buildmaster adc950099e Sync docs from 2.1.x to gh-pages 2019-03-27 02:42:41 +00:00
buildmaster bce8e3bf42 Sync docs from 2.0.x to gh-pages 2019-03-27 01:34:33 +00:00
buildmaster 509881a0ab Sync docs from 2.1.x to gh-pages 2019-03-26 02:42:43 +00:00
buildmaster 604c2cfa1a Sync docs from 2.0.x to gh-pages 2019-03-26 01:34:56 +00:00
buildmaster 6d98796911 Sync docs from 2.1.x to gh-pages 2019-03-25 23:23:50 +00:00
buildmaster 81fc89544d Sync docs from 2.1.x to gh-pages 2019-03-25 02:42:39 +00:00
buildmaster 0953faee7f Sync docs from 2.0.x to gh-pages 2019-03-25 01:34:34 +00:00
buildmaster 60c64eeba1 Sync docs from 2.1.x to gh-pages 2019-03-24 02:42:41 +00:00
buildmaster b35510d43a Sync docs from 2.0.x to gh-pages 2019-03-24 01:34:34 +00:00
buildmaster 705d88ec60 Sync docs from 2.1.x to gh-pages 2019-03-23 02:42:38 +00:00
buildmaster 603e1245fe Sync docs from 2.0.x to gh-pages 2019-03-23 01:34:34 +00:00
buildmaster 87d7525852 Sync docs from 2.0.x to gh-pages 2019-03-22 04:34:30 +00:00
buildmaster e82b67ad55 Sync docs from 2.1.x to gh-pages 2019-03-22 02:42:40 +00:00
Spring Operator a470ade15f URL Cleanup (#156)
This commit updates URLs to prefer the https protocol. Redirects are not followed to avoid accidentally expanding intentionally shortened URLs (i.e. if using a URL shortener).

# Fixed URLs

## Fixed Success
These URLs were switched to an https URL with a 2xx status. While the status was successful, your review is still recommended.

* [ ] http://www.apache.org/licenses/LICENSE-2.0 with 17 occurrences migrated to:
  https://www.apache.org/licenses/LICENSE-2.0 ([https](https://www.apache.org/licenses/LICENSE-2.0) result 200).
* [ ] http://www.apache.org/licenses/LICENSE-2.0.txt with 1 occurrences migrated to:
  https://www.apache.org/licenses/LICENSE-2.0.txt ([https](https://www.apache.org/licenses/LICENSE-2.0.txt) result 200).
2019-03-21 15:14:55 -04:00
buildmaster 645115e2fb Sync docs from 2.1.x to gh-pages 2019-03-21 02:42:41 +00:00
buildmaster 003bd810ce Sync docs from 2.0.x to gh-pages 2019-03-21 01:34:34 +00:00
buildmaster 52fe972862 Sync docs from 2.1.x to gh-pages 2019-03-20 02:42:37 +00:00
buildmaster 53f597ba9f Sync docs from 2.0.x to gh-pages 2019-03-20 01:34:36 +00:00
buildmaster 42216131af Sync docs from 2.1.x to gh-pages 2019-03-19 02:42:56 +00:00
buildmaster 5bdae130ec Sync docs from 2.0.x to gh-pages 2019-03-19 01:34:34 +00:00
buildmaster 5a6fe59e9f Sync docs from 2.1.x to gh-pages 2019-03-18 02:42:38 +00:00
buildmaster 233f203b59 Sync docs from 2.0.x to gh-pages 2019-03-18 01:34:34 +00:00
buildmaster a511a6b676 Sync docs from 2.1.x to gh-pages 2019-03-17 02:42:37 +00:00
buildmaster 1fb3743720 Sync docs from 2.0.x to gh-pages 2019-03-17 01:34:34 +00:00
buildmaster 6ca47a23dd Sync docs from 2.1.x to gh-pages 2019-03-16 17:42:40 +00:00
Spring Operator 249ed1708a URL Cleanup (#150)
This commit updates URLs to prefer the https protocol. Redirects are not followed to avoid accidentally expanding intentionally shortened URLs (i.e. if using a URL shortener).

# Fixed URLs

## Fixed Success 
These URLs were switched to an https URL with a 2xx status. While the status was successful, your review is still recommended.

* http://stackoverflow.com/questions/1593051/how-to-programmatically-determine-the-current-checked-out-git-branch with 3 occurrences migrated to:  
  https://stackoverflow.com/questions/1593051/how-to-programmatically-determine-the-current-checked-out-git-branch ([https](https://stackoverflow.com/questions/1593051/how-to-programmatically-determine-the-current-checked-out-git-branch) result 200).
* http://stackoverflow.com/questions/29300806/a-bash-script-to-check-if-a-string-is-present-in-a-comma-separated-list-of-strin with 3 occurrences migrated to:  
  https://stackoverflow.com/questions/29300806/a-bash-script-to-check-if-a-string-is-present-in-a-comma-separated-list-of-strin ([https](https://stackoverflow.com/questions/29300806/a-bash-script-to-check-if-a-string-is-present-in-a-comma-separated-list-of-strin) result 200).
2019-03-16 11:52:41 -04:00
buildmaster 34cef33513 Sync docs from 2.1.x to gh-pages 2019-03-16 02:42:40 +00:00
buildmaster 27c732739b Sync docs from 2.0.x to gh-pages 2019-03-16 01:34:34 +00:00
buildmaster b7db47a530 Sync docs from 2.1.x to gh-pages 2019-03-15 02:42:42 +00:00
buildmaster 3b5282752d Sync docs from 2.0.x to gh-pages 2019-03-15 01:34:34 +00:00
buildmaster 8f07ed2fff Sync docs from 2.1.x to gh-pages 2019-03-14 02:42:40 +00:00
buildmaster d7702382ef Sync docs from 2.0.x to gh-pages 2019-03-14 01:34:31 +00:00
buildmaster 94caa0315d Sync docs from 2.1.x to gh-pages 2019-03-13 02:42:38 +00:00
buildmaster bb301770e1 Sync docs from 2.0.x to gh-pages 2019-03-13 01:34:58 +00:00
buildmaster 9fd3b26ca5 Sync docs from 2.1.x to gh-pages 2019-03-12 02:42:45 +00:00
buildmaster 952c28952f Sync docs from 2.0.x to gh-pages 2019-03-12 01:34:33 +00:00
buildmaster c4a3bbccc9 Sync docs from 2.1.x to gh-pages 2019-03-11 02:42:38 +00:00
buildmaster eb3661097e Sync docs from 2.0.x to gh-pages 2019-03-11 01:34:33 +00:00
buildmaster b6c898eadb Sync docs from 2.1.x to gh-pages 2019-03-10 02:42:37 +00:00
buildmaster 7df5a3ed94 Sync docs from 2.0.x to gh-pages 2019-03-10 01:34:29 +00:00
buildmaster 948177b3b3 Sync docs from 2.1.x to gh-pages 2019-03-09 02:42:40 +00:00
buildmaster 69646305d2 Sync docs from 2.0.x to gh-pages 2019-03-09 01:34:29 +00:00
buildmaster 3754ab6692 Sync docs from 2.1.x to gh-pages 2019-03-08 17:42:47 +00:00
Marcin Grzejszczak 1d3190040c Sync docs from master to gh-pages 2019-03-08 11:57:42 +01:00
buildmaster a7a02d2d82 Sync docs from master to gh-pages 2019-03-08 02:38:36 +00:00
buildmaster f12a9cd1bd Sync docs from 2.0.x to gh-pages 2019-03-08 01:34:29 +00:00
buildmaster 070efd7942 Sync docs from master to gh-pages 2019-03-07 02:38:40 +00:00
buildmaster f4e62e4e32 Sync docs from 2.0.x to gh-pages 2019-03-07 01:34:33 +00:00
buildmaster 04810ab93b Sync docs from master to gh-pages 2019-03-06 02:38:36 +00:00
buildmaster 664f50fd0e Sync docs from 2.0.x to gh-pages 2019-03-06 01:34:33 +00:00
buildmaster 5fb77cbe4a Sync docs from master to gh-pages 2019-03-05 17:48:52 +00:00
buildmaster 7b26c141c7 Sync docs from master to gh-pages 2019-03-05 02:38:38 +00:00
buildmaster c64302e9a2 Sync docs from 2.0.x to gh-pages 2019-03-05 01:34:33 +00:00
buildmaster 19bb0b47ff Sync docs from master to gh-pages 2019-03-04 02:38:38 +00:00
buildmaster 9715acc6b7 Sync docs from 2.0.x to gh-pages 2019-03-04 01:34:30 +00:00
buildmaster 87be0ec4db Sync docs from master to gh-pages 2019-03-03 02:38:41 +00:00
buildmaster bb5a51b8f8 Sync docs from 2.0.x to gh-pages 2019-03-03 01:34:29 +00:00
buildmaster ebc03c682b Sync docs from master to gh-pages 2019-03-02 02:38:38 +00:00
buildmaster 109bf2afde Sync docs from 2.0.x to gh-pages 2019-03-02 01:34:33 +00:00
buildmaster 25e72ca371 Sync docs from master to gh-pages 2019-03-01 02:38:37 +00:00
buildmaster 11d0996920 Sync docs from 2.0.x to gh-pages 2019-03-01 01:34:32 +00:00
buildmaster e56926a8ce Sync docs from master to gh-pages 2019-02-28 02:38:40 +00:00
buildmaster f1069aaa18 Sync docs from 2.0.x to gh-pages 2019-02-28 01:34:32 +00:00
buildmaster ec36c85710 Sync docs from 2.0.x to gh-pages 2019-02-27 01:34:33 +00:00
buildmaster 492f6b8959 Sync docs from master to gh-pages 2019-02-27 01:25:52 +00:00
buildmaster 6e1b0fa64b Sync docs from master to gh-pages 2019-02-26 02:38:37 +00:00
buildmaster e2c184a871 Sync docs from 2.0.x to gh-pages 2019-02-26 01:35:43 +00:00
buildmaster e7e3e81c11 Sync docs from master to gh-pages 2019-02-25 02:38:36 +00:00
buildmaster 1095f8d42e Sync docs from 2.0.x to gh-pages 2019-02-25 01:34:28 +00:00
buildmaster 34414e215d Sync docs from master to gh-pages 2019-02-24 02:38:40 +00:00
buildmaster da527b1d13 Sync docs from 2.0.x to gh-pages 2019-02-24 01:34:29 +00:00
buildmaster 9e94742161 Sync docs from master to gh-pages 2019-02-23 02:38:41 +00:00
buildmaster 17cfdf03e4 Sync docs from 2.0.x to gh-pages 2019-02-23 01:34:32 +00:00
buildmaster f0b258c499 Sync docs from 2.0.x to gh-pages 2019-02-22 15:49:24 +00:00
buildmaster df7432324b Sync docs from master to gh-pages 2019-02-22 02:38:37 +00:00
buildmaster 5437f2f2c4 Sync docs from 2.0.x to gh-pages 2019-02-22 01:34:32 +00:00
buildmaster 1b25760d2e Sync docs from master to gh-pages 2019-02-21 02:38:42 +00:00
buildmaster cd56e809c9 Sync docs from 2.0.x to gh-pages 2019-02-21 01:34:29 +00:00
buildmaster 7936d79440 Sync docs from master to gh-pages 2019-02-20 02:38:37 +00:00
buildmaster cefc0b7ed2 Sync docs from 2.0.x to gh-pages 2019-02-20 01:34:34 +00:00
buildmaster eaf1ba1816 Sync docs from master to gh-pages 2019-02-19 02:38:37 +00:00
buildmaster 36fcf17610 Sync docs from 2.0.x to gh-pages 2019-02-19 01:34:29 +00:00
buildmaster 33a77053fd Sync docs from master to gh-pages 2019-02-18 02:38:41 +00:00
buildmaster 55e425d60c Sync docs from 2.0.x to gh-pages 2019-02-18 01:34:33 +00:00
buildmaster 635af587fa Sync docs from master to gh-pages 2019-02-17 02:38:37 +00:00
buildmaster 7d611c91f8 Sync docs from 2.0.x to gh-pages 2019-02-17 01:34:33 +00:00
buildmaster fc3b18ef0c Sync docs from master to gh-pages 2019-02-16 02:38:39 +00:00
buildmaster 963a0f1adc Sync docs from 2.0.x to gh-pages 2019-02-16 01:34:32 +00:00
buildmaster acee5c18d3 Sync docs from master to gh-pages 2019-02-15 02:38:41 +00:00
buildmaster e6d2ca7e6a Sync docs from 2.0.x to gh-pages 2019-02-15 01:34:29 +00:00
buildmaster c8e6cef19b Sync docs from master to gh-pages 2019-02-14 02:38:42 +00:00
buildmaster 9ac587e0cd Sync docs from 2.0.x to gh-pages 2019-02-14 01:34:29 +00:00
buildmaster a5f315d4e3 Sync docs from master to gh-pages 2019-02-13 02:38:38 +00:00
buildmaster 06c7cbc1ec Sync docs from 2.0.x to gh-pages 2019-02-13 01:34:37 +00:00
buildmaster a0e3a638a8 Sync docs from master to gh-pages 2019-02-12 02:38:41 +00:00
buildmaster d13c65ca9e Sync docs from 2.0.x to gh-pages 2019-02-12 01:34:34 +00:00
buildmaster 5ab87b83d3 Sync docs from master to gh-pages 2019-02-11 02:38:38 +00:00
buildmaster 3f5a8f6a61 Sync docs from 2.0.x to gh-pages 2019-02-11 01:34:34 +00:00
buildmaster 148692228c Sync docs from master to gh-pages 2019-02-10 02:38:41 +00:00
buildmaster 9bdc353d9d Sync docs from 2.0.x to gh-pages 2019-02-10 01:34:34 +00:00
buildmaster b617c8b396 Sync docs from master to gh-pages 2019-02-09 02:38:38 +00:00
buildmaster 2a6b95c236 Sync docs from 2.0.x to gh-pages 2019-02-09 01:34:34 +00:00
buildmaster 47e43d1a76 Sync docs from master to gh-pages 2019-02-08 02:38:45 +00:00
buildmaster 210bf32ed4 Sync docs from 2.0.x to gh-pages 2019-02-08 01:34:29 +00:00
buildmaster a68a708eb7 Sync docs from master to gh-pages 2019-02-07 14:38:44 +00:00
buildmaster b4c4448872 Sync docs from master to gh-pages 2019-02-07 02:38:38 +00:00
buildmaster 5834f802a6 Sync docs from 2.0.x to gh-pages 2019-02-07 01:34:34 +00:00
buildmaster 80192a73d3 Sync docs from master to gh-pages 2019-02-06 02:38:42 +00:00
buildmaster 8de8068260 Sync docs from 2.0.x to gh-pages 2019-02-06 01:34:34 +00:00
buildmaster f93be03fbd Sync docs from master to gh-pages 2019-02-05 02:38:32 +00:00
buildmaster 313b0bcb69 Sync docs from 2.0.x to gh-pages 2019-02-05 01:34:33 +00:00
buildmaster 5feb6a1090 Sync docs from master to gh-pages 2019-02-04 02:38:32 +00:00
buildmaster fc6919d6f9 Sync docs from 2.0.x to gh-pages 2019-02-04 01:34:33 +00:00
buildmaster 11a90b0c63 Sync docs from master to gh-pages 2019-02-03 02:38:31 +00:00
buildmaster 891b1a244d Sync docs from 2.0.x to gh-pages 2019-02-03 01:34:33 +00:00
buildmaster 31abd54f19 Sync docs from master to gh-pages 2019-02-02 02:38:31 +00:00
buildmaster e41059bd36 Sync docs from 2.0.x to gh-pages 2019-02-02 01:34:33 +00:00
buildmaster 3f9d5cb26f Sync docs from master to gh-pages 2019-02-01 02:38:35 +00:00
buildmaster 758c06348c Sync docs from 2.0.x to gh-pages 2019-02-01 01:34:30 +00:00
buildmaster 3410cb81a1 Sync docs from master to gh-pages 2019-01-31 02:38:35 +00:00
buildmaster 5851cf17a7 Sync docs from 2.0.x to gh-pages 2019-01-31 01:34:33 +00:00
buildmaster 207779857d Sync docs from master to gh-pages 2019-01-30 02:38:32 +00:00
buildmaster 0c710d2ed8 Sync docs from 2.0.x to gh-pages 2019-01-30 01:34:34 +00:00
buildmaster 0ccaa8c482 Sync docs from master to gh-pages 2019-01-29 02:38:32 +00:00
buildmaster 00f022f821 Sync docs from 2.0.x to gh-pages 2019-01-29 01:34:34 +00:00
buildmaster b5a005c241 Sync docs from master to gh-pages 2019-01-28 02:38:36 +00:00
buildmaster 5f559609b9 Sync docs from 2.0.x to gh-pages 2019-01-28 01:34:34 +00:00
buildmaster 394abdce53 Sync docs from master to gh-pages 2019-01-27 02:38:35 +00:00
buildmaster 95f3eac29d Sync docs from 2.0.x to gh-pages 2019-01-27 01:34:34 +00:00
buildmaster ae214d2aa2 Sync docs from master to gh-pages 2019-01-26 02:38:32 +00:00
buildmaster 6c8a0998b5 Sync docs from 2.0.x to gh-pages 2019-01-26 01:34:34 +00:00
buildmaster 4226a1d4c8 Sync docs from master to gh-pages 2019-01-25 02:38:31 +00:00
buildmaster c90bb2b11d Sync docs from 2.0.x to gh-pages 2019-01-25 01:34:35 +00:00
buildmaster fdc4c9f3ae Sync docs from master to gh-pages 2019-01-24 02:38:30 +00:00
buildmaster e13171a38a Sync docs from 2.0.x to gh-pages 2019-01-24 01:34:34 +00:00
buildmaster c90d646e5e Sync docs from master to gh-pages 2019-01-23 02:38:30 +00:00
buildmaster c536e6da44 Sync docs from 2.0.x to gh-pages 2019-01-23 01:34:37 +00:00
buildmaster 86f49c31d5 Sync docs from master to gh-pages 2019-01-22 18:35:05 +00:00
buildmaster 9df4e91b59 Sync docs from master to gh-pages 2019-01-22 02:38:32 +00:00
buildmaster 4673b415cd Sync docs from 2.0.x to gh-pages 2019-01-22 01:34:32 +00:00
buildmaster 3095d75a7e Sync docs from master to gh-pages 2019-01-21 02:38:32 +00:00
buildmaster b3c04f5484 Sync docs from 2.0.x to gh-pages 2019-01-21 01:34:34 +00:00
buildmaster 085f659769 Sync docs from master to gh-pages 2019-01-20 02:38:32 +00:00
buildmaster 9b89d68c9a Sync docs from 2.0.x to gh-pages 2019-01-20 01:34:34 +00:00
buildmaster c33f43a8c2 Sync docs from master to gh-pages 2019-01-19 02:38:36 +00:00
buildmaster f32e63c6b8 Sync docs from 2.0.x to gh-pages 2019-01-19 01:34:34 +00:00
buildmaster 790b3e05b2 Sync docs from master to gh-pages 2019-01-18 02:38:36 +00:00
buildmaster 0bd1e70253 Sync docs from 2.0.x to gh-pages 2019-01-18 01:34:31 +00:00
buildmaster 27986c73b7 Sync docs from master to gh-pages 2019-01-17 02:38:35 +00:00
buildmaster d584d3e210 Sync docs from 2.0.x to gh-pages 2019-01-17 01:34:34 +00:00
buildmaster 8d5e2e203b Sync docs from master to gh-pages 2019-01-16 02:38:33 +00:00
buildmaster 82a8ea8f2e Sync docs from 2.0.x to gh-pages 2019-01-16 01:34:34 +00:00
buildmaster ae190189c3 Sync docs from 2.0.x to gh-pages 2019-01-15 17:58:07 +00:00
buildmaster 98f382bd0d Sync docs from master to gh-pages 2019-01-15 17:37:18 +00:00
buildmaster 9a4875e2ff Sync docs from master to gh-pages 2019-01-14 02:38:36 +00:00
buildmaster c12d6ca276 Sync docs from 2.0.x to gh-pages 2019-01-14 01:34:35 +00:00
buildmaster df29112c05 Sync docs from master to gh-pages 2019-01-13 02:38:32 +00:00
buildmaster d21869d0a1 Sync docs from 2.0.x to gh-pages 2019-01-13 01:34:30 +00:00
buildmaster 7c09a2074e Sync docs from master to gh-pages 2019-01-12 02:38:33 +00:00
buildmaster a2faf11b6b Sync docs from 2.0.x to gh-pages 2019-01-12 01:34:34 +00:00
buildmaster 154485e071 Sync docs from master to gh-pages 2019-01-11 02:38:32 +00:00
buildmaster 6b096ff62a Sync docs from 2.0.x to gh-pages 2019-01-11 01:34:35 +00:00
buildmaster c13e2b169a Sync docs from master to gh-pages 2019-01-10 02:38:32 +00:00
buildmaster 10543d7837 Sync docs from 2.0.x to gh-pages 2019-01-10 01:34:34 +00:00
buildmaster 94a9313bf2 Sync docs from master to gh-pages 2019-01-09 02:38:32 +00:00
buildmaster 7bfcc5f2bb Sync docs from 2.0.x to gh-pages 2019-01-09 01:34:39 +00:00
buildmaster 9b5b174b9f Sync docs from master to gh-pages 2019-01-08 02:38:33 +00:00
buildmaster 2fa09e86b0 Sync docs from 2.0.x to gh-pages 2019-01-08 01:34:34 +00:00
buildmaster 830ca1e662 Sync docs from master to gh-pages 2019-01-07 14:36:32 +00:00
buildmaster 022400d961 Sync docs from master to gh-pages 2019-01-07 02:38:32 +00:00
buildmaster 999d6cc758 Sync docs from 2.0.x to gh-pages 2019-01-07 01:34:36 +00:00
buildmaster c6a418da05 Sync docs from master to gh-pages 2019-01-06 02:38:31 +00:00
buildmaster b9a7a8342d Sync docs from 2.0.x to gh-pages 2019-01-06 01:34:30 +00:00
buildmaster 04ce1ea118 Sync docs from master to gh-pages 2019-01-05 02:38:32 +00:00
buildmaster 535fccc0be Sync docs from 2.0.x to gh-pages 2019-01-05 01:34:35 +00:00
buildmaster fdcaa4a670 Sync docs from master to gh-pages 2019-01-04 02:38:36 +00:00
buildmaster 4f8bf14b96 Sync docs from 2.0.x to gh-pages 2019-01-04 01:34:34 +00:00
buildmaster 314ae5e7a0 Sync docs from master to gh-pages 2019-01-03 02:38:32 +00:00
buildmaster c3783e756d Sync docs from 2.0.x to gh-pages 2019-01-03 01:34:30 +00:00
buildmaster 42788bfebb Sync docs from master to gh-pages 2019-01-02 02:38:32 +00:00
buildmaster ca6bd5c02e Sync docs from 2.0.x to gh-pages 2019-01-02 01:34:34 +00:00
buildmaster 74d7d2cd01 Sync docs from master to gh-pages 2019-01-01 02:38:32 +00:00
buildmaster aeb05ca840 Sync docs from 2.0.x to gh-pages 2019-01-01 01:34:35 +00:00
buildmaster 29c6fe5f9c Sync docs from master to gh-pages 2018-12-31 02:38:32 +00:00
buildmaster 4f18c8085f Sync docs from 2.0.x to gh-pages 2018-12-31 01:34:30 +00:00
buildmaster 19b0577164 Sync docs from master to gh-pages 2018-12-30 02:38:31 +00:00
buildmaster 96bec70f33 Sync docs from 2.0.x to gh-pages 2018-12-30 01:34:30 +00:00
buildmaster bec46600f2 Sync docs from master to gh-pages 2018-12-29 02:38:32 +00:00
buildmaster 5131f9edbf Sync docs from 2.0.x to gh-pages 2018-12-29 01:34:34 +00:00
buildmaster f3e6970400 Sync docs from 2.0.x to gh-pages 2018-12-28 04:34:31 +00:00
buildmaster 2f7e3424a6 Sync docs from master to gh-pages 2018-12-28 02:38:40 +00:00
buildmaster e44d42db93 Sync docs from master to gh-pages 2018-12-27 02:38:32 +00:00
buildmaster b55506cf25 Sync docs from 2.0.x to gh-pages 2018-12-27 01:34:34 +00:00
buildmaster 91446a64c9 Sync docs from master to gh-pages 2018-12-26 02:38:32 +00:00
buildmaster cebcba36b0 Sync docs from 2.0.x to gh-pages 2018-12-26 01:34:34 +00:00
buildmaster 94b272894c Sync docs from master to gh-pages 2018-12-25 02:38:31 +00:00
buildmaster c1da95a2ba Sync docs from 2.0.x to gh-pages 2018-12-25 01:34:33 +00:00
buildmaster 3b672c9410 Sync docs from master to gh-pages 2018-12-24 02:38:32 +00:00
buildmaster fbf27335d0 Sync docs from 2.0.x to gh-pages 2018-12-24 01:34:34 +00:00
buildmaster e643cb4efb Sync docs from master to gh-pages 2018-12-23 02:38:32 +00:00
buildmaster dd17c2edbd Sync docs from 2.0.x to gh-pages 2018-12-23 01:34:34 +00:00
buildmaster 3ab1e55843 Sync docs from master to gh-pages 2018-12-22 02:38:32 +00:00
buildmaster e841da5d23 Sync docs from 2.0.x to gh-pages 2018-12-22 01:34:34 +00:00
buildmaster 43ed1ee6a2 Sync docs from master to gh-pages 2018-12-21 02:38:33 +00:00
buildmaster 5ad0923bdd Sync docs from 2.0.x to gh-pages 2018-12-21 01:34:31 +00:00
buildmaster 8c133f63c9 Sync docs from master to gh-pages 2018-12-20 02:38:32 +00:00
buildmaster c7b4a50b9e Sync docs from 2.0.x to gh-pages 2018-12-20 01:34:31 +00:00
buildmaster 37a2105b7c Sync docs from master to gh-pages 2018-12-19 02:38:33 +00:00
buildmaster 8729c7176f Sync docs from 2.0.x to gh-pages 2018-12-19 01:34:34 +00:00
buildmaster 7b2c6af8b2 Sync docs from master to gh-pages 2018-12-18 02:38:36 +00:00
buildmaster f0ad74a7e9 Sync docs from 2.0.x to gh-pages 2018-12-18 01:34:34 +00:00
buildmaster 7194b8d10b Sync docs from master to gh-pages 2018-12-17 02:38:33 +00:00
buildmaster 7c041ed234 Sync docs from 2.0.x to gh-pages 2018-12-17 01:34:32 +00:00
buildmaster f9967edfb0 Sync docs from master to gh-pages 2018-12-16 02:38:32 +00:00
buildmaster 5840b2233c Sync docs from 2.0.x to gh-pages 2018-12-16 01:34:31 +00:00
buildmaster c0292185d1 Sync docs from master to gh-pages 2018-12-15 02:38:32 +00:00
buildmaster 53dc692809 Sync docs from 2.0.x to gh-pages 2018-12-15 01:34:31 +00:00
buildmaster ace42abbc8 Sync docs from master to gh-pages 2018-12-14 02:39:19 +00:00
buildmaster f64ffbf0fd Sync docs from 2.0.x to gh-pages 2018-12-14 01:34:34 +00:00
buildmaster 582f3f3560 Sync docs from master to gh-pages 2018-12-13 02:38:35 +00:00
buildmaster f0194c7b44 Sync docs from 2.0.x to gh-pages 2018-12-13 01:34:34 +00:00
buildmaster 5247d2fd68 Sync docs from master to gh-pages 2018-12-12 17:23:44 +00:00
buildmaster e337875619 Sync docs from master to gh-pages 2018-12-12 02:38:36 +00:00
buildmaster 6f716efc49 Sync docs from 2.0.x to gh-pages 2018-12-12 01:34:35 +00:00
buildmaster 41aaee7039 Sync docs from master to gh-pages 2018-12-11 14:13:17 +00:00
buildmaster b59bf811ef Sync docs from master to gh-pages 2018-12-11 02:38:30 +00:00
buildmaster 686a441cc7 Sync docs from 2.0.x to gh-pages 2018-12-11 01:34:30 +00:00
buildmaster 816ea3a8d6 Sync docs from master to gh-pages 2018-12-10 02:38:32 +00:00
buildmaster db91976e0f Sync docs from 2.0.x to gh-pages 2018-12-10 01:34:35 +00:00
buildmaster 03922e0c4c Sync docs from master to gh-pages 2018-12-09 02:38:31 +00:00
buildmaster 21cecd3764 Sync docs from 2.0.x to gh-pages 2018-12-09 01:34:31 +00:00
buildmaster ee3b2a5ec7 Sync docs from master to gh-pages 2018-12-08 02:38:32 +00:00
buildmaster 7d5d973af8 Sync docs from 2.0.x to gh-pages 2018-12-08 01:34:34 +00:00
buildmaster 6dc5741653 Sync docs from master to gh-pages 2018-12-07 02:38:32 +00:00
buildmaster f94ec8ab90 Sync docs from 2.0.x to gh-pages 2018-12-07 01:34:34 +00:00
buildmaster 43fd5b530d Sync docs from master to gh-pages 2018-12-06 20:27:21 +00:00
buildmaster 1285fd05cc Sync docs from master to gh-pages 2018-12-06 02:38:37 +00:00
buildmaster 814c7b2990 Sync docs from 2.0.x to gh-pages 2018-12-06 01:34:40 +00:00
buildmaster 11dce3d263 Sync docs from master to gh-pages 2018-12-05 02:38:32 +00:00
buildmaster 113701d5be Sync docs from 2.0.x to gh-pages 2018-12-05 01:34:31 +00:00
buildmaster 651f0387ba Sync docs from master to gh-pages 2018-12-04 02:38:32 +00:00
buildmaster 5b18a354eb Sync docs from 2.0.x to gh-pages 2018-12-04 01:34:31 +00:00
buildmaster 90d9a2e03f Sync docs from master to gh-pages 2018-12-03 02:38:32 +00:00
buildmaster 9e5c69bf1b Sync docs from 2.0.x to gh-pages 2018-12-03 01:34:34 +00:00
buildmaster 647572820c Sync docs from master to gh-pages 2018-12-02 02:38:32 +00:00
buildmaster 228a7dc32f Sync docs from 2.0.x to gh-pages 2018-12-02 01:34:30 +00:00
buildmaster cc5b8abbe6 Sync docs from master to gh-pages 2018-12-01 02:38:32 +00:00
buildmaster ba44050f53 Sync docs from 2.0.x to gh-pages 2018-12-01 01:34:33 +00:00
buildmaster 22cf582d2d Sync docs from master to gh-pages 2018-11-30 02:38:36 +00:00
buildmaster b31bfe769c Sync docs from 2.0.x to gh-pages 2018-11-30 01:34:34 +00:00
buildmaster 587d24c4fb Sync docs from master to gh-pages 2018-11-29 02:38:33 +00:00
buildmaster b3aa60db4a Sync docs from 2.0.x to gh-pages 2018-11-29 01:34:30 +00:00
buildmaster 2285ff8bf5 Sync docs from master to gh-pages 2018-11-28 02:38:32 +00:00
buildmaster bf14c3abfb Sync docs from 2.0.x to gh-pages 2018-11-28 01:34:34 +00:00
buildmaster 4da07c82d1 Sync docs from master to gh-pages 2018-11-27 02:38:36 +00:00
buildmaster 3057c69e6d Sync docs from 2.0.x to gh-pages 2018-11-27 01:34:31 +00:00
buildmaster 8536b25423 Sync docs from master to gh-pages 2018-11-26 02:38:31 +00:00
buildmaster 5f80a623a9 Sync docs from 2.0.x to gh-pages 2018-11-26 01:34:34 +00:00
buildmaster 2eeac81471 Sync docs from master to gh-pages 2018-11-25 02:38:30 +00:00
buildmaster f6d2c1ce82 Sync docs from 2.0.x to gh-pages 2018-11-25 01:34:34 +00:00
buildmaster c84ddd1d30 Sync docs from master to gh-pages 2018-11-24 02:38:32 +00:00
buildmaster 88b4f5fcac Sync docs from 2.0.x to gh-pages 2018-11-24 01:34:31 +00:00
buildmaster a8f98ddcb6 Sync docs from master to gh-pages 2018-11-23 02:38:36 +00:00
buildmaster 60d1ae1129 Sync docs from 2.0.x to gh-pages 2018-11-23 01:34:32 +00:00
buildmaster 34acc55b3c Sync docs from master to gh-pages 2018-11-22 02:38:32 +00:00
buildmaster e4ded84aab Sync docs from 2.0.x to gh-pages 2018-11-22 01:34:30 +00:00
buildmaster 5eee458515 Sync docs from master to gh-pages 2018-11-21 02:38:32 +00:00
buildmaster 69b12c97d6 Sync docs from 2.0.x to gh-pages 2018-11-21 01:34:31 +00:00
buildmaster d96a78c21a Sync docs from master to gh-pages 2018-11-20 02:38:38 +00:00
buildmaster 594a24194b Sync docs from 2.0.x to gh-pages 2018-11-20 01:34:37 +00:00
buildmaster eb4ca5a97c Sync docs from master to gh-pages 2018-11-19 02:38:41 +00:00
buildmaster d5e1cbb138 Sync docs from 2.0.x to gh-pages 2018-11-19 01:34:40 +00:00
buildmaster f3434671aa Sync docs from master to gh-pages 2018-11-18 02:38:39 +00:00
buildmaster 0d191b119e Sync docs from 2.0.x to gh-pages 2018-11-18 01:34:41 +00:00
buildmaster 364df144ab Sync docs from master to gh-pages 2018-11-17 02:38:50 +00:00
buildmaster 516ce60c7d Sync docs from 2.0.x to gh-pages 2018-11-17 01:35:08 +00:00
buildmaster 6bc869b6ca Sync docs from master to gh-pages 2018-11-16 02:38:57 +00:00
buildmaster 193fa70512 Sync docs from 2.0.x to gh-pages 2018-11-16 01:34:54 +00:00
buildmaster ad88b084be Sync docs from master to gh-pages 2018-11-15 02:38:56 +00:00
buildmaster 1ab05f8d3a Sync docs from 2.0.x to gh-pages 2018-11-15 01:34:52 +00:00
buildmaster c6d68a0d0c Sync docs from master to gh-pages 2018-11-14 02:38:54 +00:00
buildmaster cea2f05b91 Sync docs from 2.0.x to gh-pages 2018-11-14 01:34:55 +00:00
buildmaster be67394228 Sync docs from master to gh-pages 2018-11-13 02:38:54 +00:00
buildmaster b1e25d7600 Sync docs from 2.0.x to gh-pages 2018-11-13 01:34:56 +00:00
buildmaster 071bd2a275 Sync docs from master to gh-pages 2018-11-12 02:38:54 +00:00
buildmaster cc70954f90 Sync docs from 2.0.x to gh-pages 2018-11-12 01:34:55 +00:00
buildmaster 08bfab96fc Sync docs from master to gh-pages 2018-11-11 02:38:51 +00:00
buildmaster e825f8d56c Sync docs from 2.0.x to gh-pages 2018-11-11 01:34:50 +00:00
buildmaster 628114a983 Sync docs from master to gh-pages 2018-11-10 02:38:58 +00:00
buildmaster db2f63b638 Sync docs from 2.0.x to gh-pages 2018-11-10 01:34:54 +00:00
buildmaster 8870aeba38 Sync docs from master to gh-pages 2018-11-09 02:39:20 +00:00
buildmaster f5419c10b5 Sync docs from 2.0.x to gh-pages 2018-11-09 01:34:52 +00:00
buildmaster f3581f7bac Sync docs from master to gh-pages 2018-11-08 02:38:54 +00:00
buildmaster 5d045ae24f Sync docs from 2.0.x to gh-pages 2018-11-08 01:34:54 +00:00
buildmaster 9ea936b2b2 Sync docs from 2.0.x to gh-pages 2018-11-07 15:47:18 +00:00
buildmaster 02d557327a Sync docs from master to gh-pages 2018-11-07 02:39:30 +00:00
buildmaster cb06c54f8e Sync docs from master to gh-pages 2018-11-06 02:39:39 +00:00
buildmaster 534581a933 Sync docs from master to gh-pages 2018-11-05 02:40:04 +00:00
buildmaster 085cbcafc8 Sync docs from master to gh-pages 2018-11-04 02:39:04 +00:00
buildmaster 2b44933db8 Sync docs from master to gh-pages 2018-11-03 02:39:06 +00:00
Ryan Baxter abdf994a71 Redirecting to new project page 2018-11-02 11:27:37 -04:00
buildmaster dc2f2a329d Sync docs from master to gh-pages 2018-11-02 02:39:42 +00:00
buildmaster 8fe1dce01f Sync docs from master to gh-pages 2018-11-01 02:38:48 +00:00
buildmaster b806868f3d Sync docs from master to gh-pages 2018-10-31 02:38:51 +00:00
buildmaster 2451caff68 Sync docs from master to gh-pages 2018-10-30 02:39:01 +00:00
buildmaster 8cae9db26b Sync docs from master to gh-pages 2018-10-29 02:39:05 +00:00
buildmaster a6efd120ea Sync docs from master to gh-pages 2018-10-28 02:38:58 +00:00
buildmaster f217c8d44d Sync docs from master to gh-pages 2018-10-27 02:39:00 +00:00
buildmaster df3a8d4bde Sync docs from master to gh-pages 2018-10-26 02:39:02 +00:00
buildmaster 3b598e588e Sync docs from master to gh-pages 2018-10-25 02:38:59 +00:00
buildmaster e3173e5ba4 Sync docs from master to gh-pages 2018-10-24 02:38:56 +00:00
buildmaster 643bf6df04 Sync docs from master to gh-pages 2018-10-23 02:39:05 +00:00
buildmaster a63330c2a6 Sync docs from master to gh-pages 2018-10-22 02:39:05 +00:00
buildmaster 82e353b492 Sync docs from master to gh-pages 2018-10-21 02:39:02 +00:00
buildmaster bb8500f0d8 Sync docs from master to gh-pages 2018-10-20 02:39:05 +00:00
buildmaster eba353cea7 Sync docs from master to gh-pages 2018-10-19 02:39:03 +00:00
buildmaster da7d7c8387 Sync docs from master to gh-pages 2018-10-18 02:38:57 +00:00
buildmaster ac18ccd2c9 Sync docs from master to gh-pages 2018-10-17 11:35:24 +00:00
buildmaster c9a763deed Sync docs from master to gh-pages 2018-10-16 02:38:55 +00:00
buildmaster 8135f9ba31 Sync docs from master to gh-pages 2018-10-15 02:39:10 +00:00
buildmaster 59d11c5825 Sync docs from master to gh-pages 2018-10-14 02:39:10 +00:00
buildmaster 1d521dbd8e Sync docs from master to gh-pages 2018-10-13 02:39:00 +00:00
buildmaster f52eaaf453 Sync docs from master to gh-pages 2018-10-12 02:39:09 +00:00
buildmaster df72236434 Sync docs from master to gh-pages 2018-10-11 02:38:58 +00:00
buildmaster 82c8f11761 Sync docs from master to gh-pages 2018-10-10 02:39:03 +00:00
buildmaster b1f9e47962 Sync docs from master to gh-pages 2018-10-09 02:38:55 +00:00
buildmaster 13faaf718a Sync docs from master to gh-pages 2018-10-08 02:39:04 +00:00
buildmaster b59e4eb5d0 Sync docs from master to gh-pages 2018-10-07 02:38:56 +00:00
buildmaster 85c3341a7c Sync docs from master to gh-pages 2018-10-06 02:39:10 +00:00
buildmaster 042b3ab1c3 Sync docs from master to gh-pages 2018-10-05 02:38:59 +00:00
buildmaster 1cb5bda207 Sync docs from master to gh-pages 2018-10-04 02:38:52 +00:00
buildmaster 434b17c9e3 Sync docs from master to gh-pages 2018-10-03 02:38:58 +00:00
buildmaster 0b2866d38c Sync docs from master to gh-pages 2018-10-02 02:39:23 +00:00
buildmaster 04e57c3dfd Sync docs from master to gh-pages 2018-10-01 02:39:16 +00:00
buildmaster 7f5ce9264a Sync docs from master to gh-pages 2018-09-30 02:39:17 +00:00
buildmaster 2e3b58562e Sync docs from master to gh-pages 2018-09-29 10:56:48 +00:00
buildmaster 12676354d1 Sync docs from master to gh-pages 2018-09-29 02:44:23 +00:00
buildmaster 69ecf5b6d1 Sync docs from master to gh-pages 2018-09-28 02:44:35 +00:00
buildmaster 702ead1930 Sync docs from master to gh-pages 2018-09-27 02:44:19 +00:00
buildmaster 5dc3318e6e Sync docs from master to gh-pages 2018-09-26 02:44:17 +00:00
buildmaster ab928f0886 Sync docs from master to gh-pages 2018-09-25 02:44:13 +00:00
buildmaster d7d01ac812 Sync docs from master to gh-pages 2018-09-24 02:44:20 +00:00
buildmaster d0fe2491f4 Sync docs from master to gh-pages 2018-09-23 02:44:11 +00:00
buildmaster e979cfa748 Sync docs from master to gh-pages 2018-09-22 02:44:20 +00:00
buildmaster e4267c23b7 Sync docs from master to gh-pages 2018-09-21 02:44:18 +00:00
buildmaster 77f460ca34 Sync docs from master to gh-pages 2018-09-20 02:44:13 +00:00
buildmaster fb9cf349ae Sync docs from master to gh-pages 2018-09-19 02:44:25 +00:00
buildmaster df38514f01 Sync docs from master to gh-pages 2018-09-18 02:44:08 +00:00
buildmaster 4dafd3e67b Sync docs from master to gh-pages 2018-09-17 02:44:06 +00:00
buildmaster 11c572ec82 Sync docs from master to gh-pages 2018-09-16 02:44:05 +00:00
buildmaster a563da672d Sync docs from master to gh-pages 2018-09-15 02:44:03 +00:00
buildmaster e6793c79b6 Sync docs from master to gh-pages 2018-09-14 02:44:01 +00:00
buildmaster da4c604b88 Sync docs from master to gh-pages 2018-09-13 02:44:02 +00:00
buildmaster 106e51fa5d Sync docs from master to gh-pages 2018-09-12 02:43:59 +00:00
buildmaster f315eeb295 Sync docs from master to gh-pages 2018-09-11 02:44:02 +00:00
buildmaster 6364843b0d Sync docs from master to gh-pages 2018-09-10 02:44:04 +00:00
buildmaster 184b2e1071 Sync docs from master to gh-pages 2018-09-09 02:44:03 +00:00
buildmaster 5d79a1f589 Sync docs from master to gh-pages 2018-09-08 02:44:00 +00:00
buildmaster 2fb17533cc Sync docs from master to gh-pages 2018-09-07 02:44:02 +00:00
buildmaster 2bc6395e24 Sync docs from master to gh-pages 2018-09-06 02:43:57 +00:00
buildmaster d9ddb472b6 Sync docs from master to gh-pages 2018-09-05 02:43:56 +00:00
buildmaster 699c1747e5 Sync docs from master to gh-pages 2018-09-04 02:44:08 +00:00
buildmaster 2fedf2ae4e Sync docs from master to gh-pages 2018-09-03 02:43:56 +00:00
buildmaster 2eaeee52b3 Sync docs from master to gh-pages 2018-09-02 02:43:56 +00:00
buildmaster fcc359f071 Sync docs from master to gh-pages 2018-09-01 02:43:56 +00:00
buildmaster 726ecc1579 Sync docs from master to gh-pages 2018-08-31 02:43:59 +00:00
buildmaster b4028300d4 Sync docs from master to gh-pages 2018-08-30 02:43:54 +00:00
buildmaster ed7e4cfbd9 Sync docs from master to gh-pages 2018-08-29 02:43:52 +00:00
buildmaster 327f1cf20b Sync docs from master to gh-pages 2018-08-28 02:43:48 +00:00
buildmaster 6a73c466a1 Sync docs from master to gh-pages 2018-08-27 02:43:47 +00:00
buildmaster f5f698efe6 Sync docs from master to gh-pages 2018-08-26 02:43:48 +00:00
buildmaster 582e407bfd Sync docs from master to gh-pages 2018-08-25 02:43:45 +00:00
buildmaster 4d4f3d516a Sync docs from master to gh-pages 2018-08-24 02:43:46 +00:00
buildmaster d5f4f96512 Sync docs from master to gh-pages 2018-08-23 02:43:48 +00:00
buildmaster 63b91ce3e9 Sync docs from master to gh-pages 2018-08-22 02:43:57 +00:00
buildmaster c7312ac220 Sync docs from master to gh-pages 2018-08-21 02:43:48 +00:00
buildmaster 3927f93494 Sync docs from master to gh-pages 2018-08-20 02:43:46 +00:00
buildmaster 9fb1e9f5e7 Sync docs from master to gh-pages 2018-08-19 02:43:44 +00:00
buildmaster 6fe5575f0f Sync docs from master to gh-pages 2018-08-18 02:43:49 +00:00
buildmaster dfb22a7387 Sync docs from master to gh-pages 2018-08-17 02:43:47 +00:00
buildmaster 5347e0cae0 Sync docs from master to gh-pages 2018-08-16 02:43:45 +00:00
buildmaster e121429d9c Sync docs from master to gh-pages 2018-08-15 02:43:52 +00:00
buildmaster 5c16a5d044 Sync docs from master to gh-pages 2018-08-14 02:43:44 +00:00
buildmaster 2a76a5f4e9 Sync docs from master to gh-pages 2018-08-13 02:43:54 +00:00
buildmaster 6326a9a2a3 Sync docs from master to gh-pages 2018-08-12 02:43:49 +00:00
buildmaster ec2c52a1c1 Sync docs from master to gh-pages 2018-08-11 02:43:48 +00:00
buildmaster 6843d359d1 Sync docs from master to gh-pages 2018-08-10 02:43:42 +00:00
buildmaster ae704177a6 Sync docs from master to gh-pages 2018-08-09 02:43:44 +00:00
buildmaster 0f2d3b531f Sync docs from master to gh-pages 2018-08-08 02:43:45 +00:00
buildmaster ab3f806fdd Sync docs from master to gh-pages 2018-08-07 02:43:46 +00:00
buildmaster f0fe065480 Sync docs from master to gh-pages 2018-08-06 02:43:45 +00:00
buildmaster 8faf9213fd Sync docs from master to gh-pages 2018-08-05 02:43:46 +00:00
buildmaster fc126f2fa1 Sync docs from master to gh-pages 2018-08-04 02:43:46 +00:00
buildmaster 96352066e8 Sync docs from master to gh-pages 2018-08-03 19:05:21 +00:00
buildmaster 5c2e6cc561 Sync docs from master to gh-pages 2018-08-03 02:43:39 +00:00
buildmaster 9605451037 Sync docs from master to gh-pages 2018-08-02 02:43:41 +00:00
buildmaster c449190478 Sync docs from master to gh-pages 2018-08-01 02:43:56 +00:00
buildmaster 75494f65ba Sync docs from master to gh-pages 2018-07-31 23:43:44 +00:00
buildmaster 46e7d820f8 Sync docs from master to gh-pages 2018-07-31 02:43:48 +00:00
buildmaster 7a61896485 Sync docs from master to gh-pages 2018-07-30 02:43:46 +00:00
buildmaster a87b17caef Sync docs from master to gh-pages 2018-07-29 02:43:44 +00:00
buildmaster f1dec779b5 Sync docs from master to gh-pages 2018-07-28 02:43:43 +00:00
buildmaster ce720f4c68 Sync docs from master to gh-pages 2018-07-27 02:43:41 +00:00
buildmaster c682f68df0 Sync docs from master to gh-pages 2018-07-26 00:11:49 +00:00
buildmaster 923c1f1870 Sync docs from master to gh-pages 2018-07-25 09:37:07 +00:00
buildmaster 8a2d7d517e Sync docs from master to gh-pages 2018-07-24 02:43:43 +00:00
buildmaster 072d630863 Sync docs from master to gh-pages 2018-07-23 02:43:43 +00:00
buildmaster 7a1a24969c Sync docs from master to gh-pages 2018-07-22 02:43:43 +00:00
buildmaster 4055d8bab4 Sync docs from master to gh-pages 2018-07-21 02:43:44 +00:00
buildmaster ccee141b5c Sync docs from master to gh-pages 2018-07-20 02:43:43 +00:00
buildmaster 88722db64d Sync docs from master to gh-pages 2018-07-19 14:43:42 +00:00
buildmaster 09ab126295 Sync docs from master to gh-pages 2018-07-18 02:43:40 +00:00
buildmaster 96e4743c75 Sync docs from master to gh-pages 2018-07-17 02:43:39 +00:00
buildmaster ef38b18fef Sync docs from master to gh-pages 2018-07-16 02:43:40 +00:00
buildmaster ee16f3dce0 Sync docs from master to gh-pages 2018-07-15 02:43:38 +00:00
buildmaster 3ab15b642f Sync docs from master to gh-pages 2018-07-14 02:43:39 +00:00
buildmaster 86258426b1 Sync docs from master to gh-pages 2018-07-13 02:43:44 +00:00
buildmaster 2949b9c5f8 Sync docs from master to gh-pages 2018-07-12 02:43:42 +00:00
buildmaster e9e60a925e Sync docs from master to gh-pages 2018-07-11 02:43:42 +00:00
buildmaster a3fd007777 Sync docs from master to gh-pages 2018-07-10 02:43:42 +00:00
buildmaster 0015644964 Sync docs from master to gh-pages 2018-07-09 02:43:41 +00:00
buildmaster 7a56a02eb6 Sync docs from master to gh-pages 2018-07-08 02:43:41 +00:00
buildmaster 5f2f0edca3 Sync docs from master to gh-pages 2018-07-07 02:43:40 +00:00
buildmaster 72f9c52a35 Sync docs from master to gh-pages 2018-07-06 02:43:41 +00:00
buildmaster 4a265f1eee Sync docs from master to gh-pages 2018-07-05 02:43:43 +00:00
buildmaster aacc476cad Sync docs from master to gh-pages 2018-07-04 02:43:42 +00:00
buildmaster 59efcfbe41 Sync docs from master to gh-pages 2018-07-03 02:43:44 +00:00
buildmaster bcfeb1b883 Sync docs from master to gh-pages 2018-07-02 02:43:38 +00:00
buildmaster 827801df91 Sync docs from master to gh-pages 2018-07-01 02:43:40 +00:00
buildmaster 95bbfecae0 Sync docs from master to gh-pages 2018-06-30 02:43:40 +00:00
buildmaster 644aed086e Sync docs from master to gh-pages 2018-06-29 02:43:40 +00:00
buildmaster a0698c893d Sync docs from master to gh-pages 2018-06-28 02:43:38 +00:00
buildmaster 2168c9a63c Sync docs from master to gh-pages 2018-06-27 02:43:39 +00:00
buildmaster 796b2e0d3e Sync docs from master to gh-pages 2018-06-26 02:43:43 +00:00
buildmaster 0dcb039580 Sync docs from master to gh-pages 2018-06-25 02:43:41 +00:00
buildmaster 3591bb9e19 Sync docs from master to gh-pages 2018-06-24 02:43:42 +00:00
buildmaster 445588fe53 Sync docs from master to gh-pages 2018-06-23 02:43:46 +00:00
buildmaster 562443c2bb Sync docs from master to gh-pages 2018-06-22 02:43:41 +00:00
buildmaster d282645089 Sync docs from master to gh-pages 2018-06-21 02:43:42 +00:00
buildmaster 223a68b9b3 Sync docs from master to gh-pages 2018-06-20 02:43:40 +00:00
buildmaster 29ad5dcd0f Sync docs from master to gh-pages 2018-06-19 02:43:46 +00:00
buildmaster 4b0674f1e7 Sync docs from master to gh-pages 2018-06-18 20:34:20 +00:00
buildmaster 36f2e4cd7b Sync docs from master to gh-pages 2018-06-18 02:43:40 +00:00
buildmaster e53e0240f9 Sync docs from master to gh-pages 2018-06-17 02:43:40 +00:00
buildmaster d380788f52 Sync docs from master to gh-pages 2018-06-16 02:43:43 +00:00
buildmaster e36e7e0321 Sync docs from master to gh-pages 2018-06-15 02:43:43 +00:00
buildmaster 20843276f4 Sync docs from master to gh-pages 2018-06-14 02:43:44 +00:00
buildmaster f6be97a474 Sync docs from master to gh-pages 2018-06-13 02:43:49 +00:00
buildmaster db33755401 Sync docs from master to gh-pages 2018-06-12 02:43:48 +00:00
buildmaster 3ee4d2b7db Sync docs from master to gh-pages 2018-06-11 02:43:47 +00:00
buildmaster b5e768e7c5 Sync docs from master to gh-pages 2018-06-10 02:43:47 +00:00
buildmaster 7015843850 Sync docs from master to gh-pages 2018-06-09 02:43:47 +00:00
buildmaster b244eb0937 Sync docs from master to gh-pages 2018-06-08 02:43:46 +00:00
buildmaster bf9a6f1931 Sync docs from master to gh-pages 2018-06-07 02:43:48 +00:00
buildmaster d194e26735 Sync docs from master to gh-pages 2018-06-06 02:43:44 +00:00
buildmaster fc9269e828 Sync docs from master to gh-pages 2018-06-05 02:43:52 +00:00
buildmaster 8a41593c28 Sync docs from master to gh-pages 2018-06-04 02:43:52 +00:00
buildmaster a2d6d63526 Sync docs from master to gh-pages 2018-06-03 02:43:51 +00:00
buildmaster 44ba09d853 Sync docs from master to gh-pages 2018-06-02 02:43:51 +00:00
buildmaster 6cb45c8497 Sync docs from master to gh-pages 2018-06-01 02:43:51 +00:00
buildmaster 43317c0a2d Sync docs from master to gh-pages 2018-05-31 02:43:58 +00:00
buildmaster 82dbad1cfe Sync docs from master to gh-pages 2018-05-30 02:43:46 +00:00
buildmaster ecdbe26943 Sync docs from master to gh-pages 2018-05-29 15:10:10 +00:00
buildmaster 0a08c2336e Sync docs from master to gh-pages 2018-05-29 02:43:45 +00:00
buildmaster b831df1d98 Sync docs from master to gh-pages 2018-05-28 02:43:44 +00:00
buildmaster 7e344e9bef Sync docs from master to gh-pages 2018-05-27 02:43:43 +00:00
buildmaster 025577564b Sync docs from master to gh-pages 2018-05-26 02:43:43 +00:00
buildmaster ae564d8954 Sync docs from master to gh-pages 2018-05-25 02:43:45 +00:00
buildmaster 8ecd23b649 Sync docs from master to gh-pages 2018-05-24 15:42:27 +00:00
buildmaster b379efd248 Sync docs from master to gh-pages 2018-05-24 02:43:47 +00:00
buildmaster 7e987318e3 Sync docs from master to gh-pages 2018-05-23 02:43:44 +00:00
buildmaster 04305d5f0e Sync docs from master to gh-pages 2018-05-22 02:43:43 +00:00
buildmaster feb310fed9 Sync docs from master to gh-pages 2018-05-21 02:43:43 +00:00
buildmaster f6784b1ce8 Sync docs from master to gh-pages 2018-05-20 02:43:43 +00:00
buildmaster 799419975b Sync docs from master to gh-pages 2018-05-19 02:43:44 +00:00
buildmaster d461bd0021 Sync docs from master to gh-pages 2018-05-18 02:43:43 +00:00
buildmaster 5771ed185a Sync docs from master to gh-pages 2018-05-17 02:43:43 +00:00
buildmaster 8f45694bf8 Sync docs from master to gh-pages 2018-05-16 02:43:41 +00:00
buildmaster 7e72e12438 Sync docs from master to gh-pages 2018-05-15 02:43:41 +00:00
buildmaster 24e599e1ca Sync docs from master to gh-pages 2018-05-14 02:43:51 +00:00
buildmaster e8dcc6430d Sync docs from master to gh-pages 2018-05-13 02:43:41 +00:00
buildmaster 3acc32abe2 Sync docs from master to gh-pages 2018-05-12 02:43:41 +00:00
buildmaster d75545d210 Sync docs from master to gh-pages 2018-05-11 02:43:40 +00:00
buildmaster 36172c30d1 Sync docs from master to gh-pages 2018-05-10 02:43:40 +00:00
buildmaster 3abbb177e6 Sync docs from master to gh-pages 2018-05-09 02:43:40 +00:00
buildmaster 6577df0dea Sync docs from master to gh-pages 2018-05-08 02:43:39 +00:00
buildmaster aa48bd7e8c Sync docs from master to gh-pages 2018-05-07 02:44:28 +00:00
buildmaster c2f7e5fb0b Sync docs from master to gh-pages 2018-05-06 02:44:05 +00:00
buildmaster c7041ff2cb Sync docs from master to gh-pages 2018-05-05 02:44:09 +00:00
buildmaster 5b5bc67bdb Sync docs from master to gh-pages 2018-05-04 02:44:05 +00:00
buildmaster 3957673bf0 Sync docs from master to gh-pages 2018-05-03 02:44:03 +00:00
buildmaster ae55044d2e Sync docs from master to gh-pages 2018-05-02 02:44:02 +00:00
buildmaster 2518df8a98 Sync docs from master to gh-pages 2018-05-01 02:44:01 +00:00
buildmaster 75171ac7cf Sync docs from master to gh-pages 2018-04-30 02:44:06 +00:00
buildmaster 001437e760 Sync docs from master to gh-pages 2018-04-29 02:44:01 +00:00
buildmaster b8e8ae9fea Sync docs from master to gh-pages 2018-04-28 02:44:02 +00:00
buildmaster 9f7857621a Sync docs from master to gh-pages 2018-04-27 02:44:03 +00:00
buildmaster 79f67d856c Sync docs from master to gh-pages 2018-04-26 02:44:24 +00:00
buildmaster d656de65c7 Sync docs from master to gh-pages 2018-04-25 02:44:06 +00:00
buildmaster 65550d9bce Sync docs from master to gh-pages 2018-04-24 02:44:06 +00:00
buildmaster 7935e6b741 Sync docs from master to gh-pages 2018-04-23 02:44:01 +00:00
buildmaster 2b68a27326 Sync docs from master to gh-pages 2018-04-22 02:44:00 +00:00
buildmaster df054d631c Sync docs from master to gh-pages 2018-04-21 02:44:01 +00:00
buildmaster 9982907683 Sync docs from master to gh-pages 2018-04-20 02:44:04 +00:00
buildmaster a801d92ea9 Sync docs from master to gh-pages 2018-04-19 02:44:05 +00:00
buildmaster 9ffb0e58ea Sync docs from master to gh-pages 2018-04-18 02:43:58 +00:00
buildmaster 0c9032ee8f Sync docs from master to gh-pages 2018-04-17 02:43:53 +00:00
buildmaster f1bce08f43 Sync docs from master to gh-pages 2018-04-16 02:43:52 +00:00
buildmaster a0df261530 Sync docs from master to gh-pages 2018-04-15 02:43:53 +00:00
buildmaster 1e3385fca3 Sync docs from master to gh-pages 2018-04-14 02:43:54 +00:00
buildmaster ce5621dcc1 Sync docs from master to gh-pages 2018-04-13 02:43:52 +00:00
buildmaster bbc7c16c3a Sync docs from master to gh-pages 2018-04-12 02:43:50 +00:00
buildmaster fccbc1410f Sync docs from master to gh-pages 2018-04-11 02:43:47 +00:00
buildmaster 64e097400b Sync docs from master to gh-pages 2018-04-10 02:43:47 +00:00
buildmaster 3e516b098b Sync docs from master to gh-pages 2018-04-09 02:43:46 +00:00
buildmaster f5dbd4edba Sync docs from master to gh-pages 2018-04-08 02:43:45 +00:00
buildmaster 2177f51916 Sync docs from master to gh-pages 2018-04-07 02:43:45 +00:00
buildmaster b03797b0d6 Sync docs from master to gh-pages 2018-04-06 02:43:46 +00:00
buildmaster 089bd9855f Sync docs from master to gh-pages 2018-04-05 02:43:51 +00:00
buildmaster 0235989cf9 Sync docs from master to gh-pages 2018-04-04 02:43:46 +00:00
buildmaster 748a40e2c7 Sync docs from master to gh-pages 2018-04-03 02:43:43 +00:00
buildmaster c60ab8c243 Sync docs from master to gh-pages 2018-04-02 02:43:42 +00:00
buildmaster 4b59216661 Sync docs from master to gh-pages 2018-04-01 02:43:42 +00:00
buildmaster d390c8edf7 Sync docs from master to gh-pages 2018-03-31 02:43:41 +00:00
buildmaster f3d0fffdfb Sync docs from master to gh-pages 2018-03-30 02:43:43 +00:00
buildmaster 51ad375faf Sync docs from master to gh-pages 2018-03-29 02:43:42 +00:00
buildmaster f5917619d6 Sync docs from master to gh-pages 2018-03-28 02:44:04 +00:00
buildmaster 29446da852 Sync docs from master to gh-pages 2018-03-27 02:44:04 +00:00
buildmaster e4ea4ff205 Sync docs from master to gh-pages 2018-03-26 02:44:01 +00:00
buildmaster a711ae8479 Sync docs from master to gh-pages 2018-03-25 02:44:01 +00:00
buildmaster 41f9eee5d5 Sync docs from master to gh-pages 2018-03-24 02:44:01 +00:00
buildmaster 05c11a10f7 Sync docs from master to gh-pages 2018-03-23 02:44:06 +00:00
Ryan Baxter 504d1c191c Adding circle config 2018-03-21 20:40:39 -04:00
buildmaster bc1f25dbdb Sync docs from master to gh-pages 2018-03-22 00:09:40 +00:00
buildmaster 5fc49c34e7 Sync docs from master to gh-pages 2018-03-21 02:44:03 +00:00
buildmaster 38c9df3622 Sync docs from master to gh-pages 2018-03-20 02:44:03 +00:00
buildmaster f6d2064504 Sync docs from master to gh-pages 2018-03-19 02:44:09 +00:00
buildmaster cd5398db9c Sync docs from master to gh-pages 2018-03-18 02:44:03 +00:00
buildmaster 97df17e51b Sync docs from master to gh-pages 2018-03-17 02:44:03 +00:00
buildmaster 00de1b6458 Sync docs from master to gh-pages 2018-03-16 02:44:02 +00:00
buildmaster 47f9af9011 Sync docs from master to gh-pages 2018-03-15 02:44:00 +00:00
buildmaster 2b49278970 Sync docs from master to gh-pages 2018-03-14 02:44:00 +00:00
buildmaster 706190193b Sync docs from master to gh-pages 2018-03-13 02:17:31 +00:00
Ryan Baxter 5affdde8d8 Updating gitignore and removing target directories 2018-03-12 16:55:33 -04:00
buildmaster 97b08d06d9 Sync docs from master to gh-pages 2018-03-09 12:33:32 +00:00
buildmaster 6af2eb1667 Sync docs from master to gh-pages 2018-03-09 01:26:55 +00:00
Ryan Baxter ed9ae8a7e1 Initialize project page 2018-03-08 19:48:56 -05:00
Brian Clozel b2be58e5da Add defensive check for empty repository key 2017-03-23 15:58:52 +01:00
Brian Clozel e7438db1de Jekyll must be run with "bundle exec" command 2016-10-09 15:42:10 +02:00
Brian Clozel d14f6c1347 Merge pull request #18 from stonio/patch-2
remove alt attribute in <div>
2016-07-11 14:06:13 +02:00
Brian Clozel ebe3c742cc Merge pull request #17 from stonio/patch-1
Polish page.html
2016-07-11 14:05:39 +02:00
Brian Clozel ee9ea07249 Merge pull request #19 from wilkinsona/fix-jekyll-deprecation-warnings
Upgrade github-pages gem to fix deprecation warnings
2016-07-11 14:04:58 +02:00
Andy Wilkinson ce422b042e Upgrade github-pages gem to fix deprecation warnings
Previously, when running bundle exec jekyll serve a false-positive
deprecation warning was reported:

Deprecation: Auto-regeneration can no longer be set from your
configuration file(s). Use the --[no-]watch/-w command-line option
instead.

See https://github.com/jekyll/jekyll/issues/4831 for some details.
Jekyll 3.0.5 fixes the problem. This commit upgrades to the latest
version of github-pages, thereby also upgrading to Jekyll 3.0.5
2016-07-08 09:24:18 +01:00
stonio ce11407d96 remove alt attribute in <div> 2016-06-24 17:37:27 +02:00
stonio 1c2c952e2a Polish page.html
Remove default attributes and other little improvements.
2016-06-24 17:11:27 +02:00
Brian Clozel 48804fff88 Merge pull request #15 from dsyer/rouge
Add rouge gem
2016-04-26 11:48:27 +02:00
Dave Syer 00077cdd4d Add rouge gem 2016-04-26 10:24:07 +01:00
Brian Clozel c7ae9c6eeb Replace ZeroClipboard with clipboard.js
For copy/paste support in our code samples, we are using the
ZeroClipboard library which relies heavily on Flash.
Because many browsers/extensions are disabling this plugin nowadays,
this commit replaces ZeroClipboard with a native, lightweight solution
for this feature.
2016-04-26 10:17:19 +02:00
Brian Clozel 25706255a3 Fix markdown syntax error
The kramdown backend doesn't support titles whithout empty lines before
them.
2016-04-26 10:16:38 +02:00
Brian Clozel 83a616b02c Upgrade rbenv Ruby version to 2.2.0 2016-04-26 10:16:05 +02:00
Brian Clozel 9191438acf Merge pull request #14 from dsyer/gh-pages-upstream
Update for changes in github pages
2016-04-25 19:05:24 +02:00
Dave Syer 86f37ce7c1 Update for changes in github pages 2016-04-25 18:00:20 +01:00
Brian Clozel d25f656a48 Fix content warning issues over https
When served with HTTP/2 and TLS, project pages show several mixed
content errors:

* the imported Google fonts
* the AJAX call to spring.io to get the current project information
* the newsletter iframe

This commit changes URLs to use https or protocol-relative URLs when
possible. This also deletes the now defunct newsletter integration.
2015-12-16 14:23:00 +01:00
Brian Clozel 8227656cb0 Merge pull request #12 from gregturn/gh-6
Conditionalize reference doc/api doc links
2015-08-18 18:38:06 +02:00
Greg Turnquist 086e2b3d2b Conditionalize showing reference doc/api doc links
If the reference doc URL of the API doc URL is empty, don't display a hyperlink.
2015-08-04 08:12:53 -07:00
Brian Clozel 7d63246f6b Revert "Display Pivotal Education related courseware"
This reverts commit bf15ee8a6d.
2015-07-16 18:56:19 +02:00
Brian Clozel bf15ee8a6d Display Pivotal Education related courseware
This change adds a new "Related Courseware" section in the side
container; this section lists links to courses and talks that are
relevant to the current project page.

Relevant content is fetched by the browser, with an AJAX request sent to
the Pivotal Education LMS API. This API uses the Referrer HTTP header as
input parameter to its content selection algorithm.

Note that CORS HTTP headers are also used to allow/disallow AJAX cross
domain requests.
2015-03-09 11:58:27 +01:00
Brian Clozel 1690b17cb4 Merge pull request #9 from dsyer/patch-2
Gem installation instructions updated
2014-10-20 10:25:27 +02:00
Dave Syer fc0cf54962 Add "gem install bundler" for people using vanilla Ruby 2014-09-30 11:36:48 +01:00
Brian Clozel 650b0f71b1 Merge pull request #10 from dsyer/patch-3
Fix directory name for sample pages
2014-09-30 11:55:08 +02:00
Dave Syer b67c026a16 Fix directory name for sample pages 2014-09-30 09:43:46 +01:00
Dave Syer ccb4a8a2bb Gem installation instructions updated
Using "gem install" didn't work for me because of the Gemfile.lock that is in source control (presumably for a reason).
2014-09-30 09:37:55 +01:00
Brian Clozel 1a150a334a Merge pull request #8 from dsyer/patch-1
Fix "rm -rf" instruictions
2014-09-30 10:13:28 +02:00
Dave Syer c340c6914f Fix "rm -rf" instruictions
Existing copy is wrong because "git rm -rf *" fails if there are any untracked files (e.g. target/). Changed to "git rm -rf `git ls-files`".
2014-09-30 09:09:50 +01:00
Brian Clozel 77167c0d39 Fix company name and website in footer 2014-09-22 18:52:09 +02:00
Brian Clozel 1ca26dffbf Merge pull request #7 from bclozel/forum
Update navbar item "Forum" -> "Questions"
2014-09-22 18:42:32 +02:00
Brian Clozel 56978cfc90 Change Forum navbar item to Questions
The projects navbar should mirror the one on the spring.io website.
2014-09-03 23:01:21 +02:00
Brian Clozel 9c7287c64f Merge pull request #4 from bclozel/zclip
Fix ZeroClipboard integration in gh-pages
2014-06-19 21:38:06 +02:00
Chris Beams 34fb3af7d3 Merge pull request #5 from wilkinsona/optional-forum-link
Make the link to a project's forum optional
2014-05-13 18:20:08 +02:00
Andy Wilkinson 7e6493ef7b Make the link to a project's forum optional
Omit the link to the forum if the project's metadata does not provide
a forum url
2014-05-13 16:22:19 +01:00
Brian Clozel 92c5b852c1 Add missing ZeroClipbpard SWF file
Flash support for ZeroClipboard is not working in project pages since
the SWF file is missing. There was a typo in the .gitignore file that
ignored "*.sw?" files.
2014-04-15 14:54:48 +02:00
Phillip Webb 85ed196cf4 Remove 'not found in _includes' hacks
Remove the use if "unless contains 'not found in _includes directory'"
hacks that were previously used to detect when _includes were missing.

This change is required as the hack no longer works with the latest
Jekyll release (and therefore also with GitHub).

Additional 'custom_pom_template' and 'custom_gradle_template' flags
must now be set in _config.yml if you want to include a custom pom.xml
or build.gradle file.
2013-11-14 10:11:34 -08:00
Phillip Webb 171918e41a Initialize shared gh-pages infrastructure 2013-09-09 01:41:47 -07:00
567 changed files with 55964 additions and 28364 deletions
-14
View File
@@ -1,14 +0,0 @@
# EditorConfig is awesome: https://EditorConfig.org
# top-most EditorConfig file
root = true
[*]
indent_style = tab
indent_size = 4
end_of_line = lf
insert_final_newline = true
[*.yml]
indent_style = space
indent_size = 2
+134
View File
@@ -0,0 +1,134 @@
<?xml version="1.0" encoding="UTF-8"?>
<project xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd" xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-build</artifactId>
<version>2.2.0.BUILD-SNAPSHOT</version>
<relativePath></relativePath>
</parent>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-openfeign</artifactId>
<version>2.2.0.BUILD-SNAPSHOT</version>
<packaging>pom</packaging>
<name>Spring Cloud OpenFeign</name>
<description>Spring Cloud OpenFeign</description>
<url>https://spring.io/spring-cloud/spring-cloud-openfeign</url>
<organization>
<name>Pivotal Software, Inc.</name>
<url>https://www.spring.io</url>
</organization>
<licenses>
<license>
<name>Apache License, Version 2.0</name>
<url>https://www.apache.org/licenses/LICENSE-2.0</url>
<comments>Copyright 2014-2015 the original author or authors.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
https://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
implied.
See the License for the specific language governing permissions and
limitations under the License.</comments>
</license>
</licenses>
<developers>
<developer>
<id>dsyer</id>
<name>Dave Syer</name>
<email>dsyer at pivotal.io</email>
<organization>Pivotal Software, Inc.</organization>
<organizationUrl>https://www.spring.io</organizationUrl>
<roles>
<role>lead</role>
</roles>
</developer>
<developer>
<id>sgibb</id>
<name>Spencer Gibb</name>
<email>sgibb at pivotal.io</email>
<organization>Pivotal Software, Inc.</organization>
<organizationUrl>https://www.spring.io</organizationUrl>
<roles>
<role>lead</role>
</roles>
</developer>
<developer>
<id>mgrzejszczak</id>
<name>Marcin Grzejszczak</name>
<email>mgrzejszczak at pivotal.io</email>
<organization>Pivotal Software, Inc.</organization>
<organizationUrl>https://www.spring.io</organizationUrl>
<roles>
<role>developer</role>
</roles>
</developer>
<developer>
<id>rbaxter</id>
<name>Ryan Baxter</name>
<email>rbaxter at pivotal.io</email>
<organization>Pivotal Software, Inc.</organization>
<organizationUrl>https://www.spring.io</organizationUrl>
<roles>
<role>developer</role>
</roles>
</developer>
<developer>
<id>omaciaszeksharma</id>
<name>Olga Maciaszek-Sharma</name>
<email>omaciaszeksharma at pivotal.io</email>
<organization>Pivotal Software, Inc.</organization>
<organizationUrl>https://www.spring.io</organizationUrl>
<roles>
<role>developer</role>
</roles>
</developer>
</developers>
<scm>
<connection>scm:git:git://github.com/spring-cloud/spring-cloud-openfeign.git</connection>
<developerConnection>scm:git:ssh://git@github.com/spring-cloud/spring-cloud-openfeign.git</developerConnection>
<url>https://github.com/spring-cloud/spring-cloud-openfeign</url>
</scm>
<profiles>
<profile>
<id>spring</id>
<repositories>
<repository>
<releases>
<enabled>false</enabled>
</releases>
<snapshots>
<enabled>true</enabled>
</snapshots>
<id>spring-snapshots</id>
<name>Spring Snapshots</name>
<url>https://repo.spring.io/libs-snapshot-local</url>
</repository>
<repository>
<snapshots>
<enabled>false</enabled>
</snapshots>
<id>spring-milestones</id>
<name>Spring Milestones</name>
<url>https://repo.spring.io/libs-milestone-local</url>
</repository>
<repository>
<snapshots>
<enabled>false</enabled>
</snapshots>
<id>spring-releases</id>
<name>Spring Releases</name>
<url>https://repo.spring.io/release</url>
</repository>
</repositories>
</profile>
</profiles>
</project>
-45
View File
@@ -1,45 +0,0 @@
# Contributing
Spring Cloud is released under the non-restrictive Apache 2.0 license,
and follows a very standard Github development process, using Github
tracker for issues and merging pull requests into main. If you want
to contribute even something trivial please do not hesitate, but
follow the guidelines below.
## Sign the Contributor License Agreement
Before we accept a non-trivial patch or pull request we will need you to sign the
[Contributor License Agreement](https://cla.pivotal.io/sign/spring).
Signing the contributor's agreement does not grant anyone commit rights to the main
repository, but it does mean that we can accept your contributions, and you will get an
author credit if we do. Active contributors might be asked to join the core team, and
given the ability to merge pull requests.
## Code of Conduct
This project adheres to the Contributor Covenant [code of
conduct](https://github.com/spring-cloud/spring-cloud-build/blob/main/docs/src/main/asciidoc/code-of-conduct.adoc). By participating, you are expected to uphold this code. Please report
unacceptable behavior to spring-code-of-conduct@pivotal.io.
## Code Conventions and Housekeeping
None of these is essential for a pull request, but they will all help. They can also be
added after the original pull request but before a merge.
* Use the Spring Framework code format conventions. If you use Eclipse
you can import formatter settings using the
`eclipse-code-formatter.xml` file from the
[Spring Cloud Build](https://raw.githubusercontent.com/spring-cloud/spring-cloud-build/main/spring-cloud-dependencies-parent/eclipse-code-formatter.xml) project. If using IntelliJ, you can use the
[Eclipse Code Formatter Plugin](https://plugins.jetbrains.com/plugin/6546) to import the same file.
* Make sure all new `.java` files to have a simple Javadoc class comment with at least an
`@author` tag identifying you, and preferably at least a paragraph on what the class is
for.
* Add the ASF license header comment to all new `.java` files (copy from existing files
in the project)
* Add yourself as an `@author` to the .java files that you modify substantially (more
than cosmetic changes).
* Add some Javadocs and, if you change the namespace, some XSD doc elements.
* A few unit tests would help a lot as well -- someone has to do it.
* If no-one else is using your branch, please rebase it against the current main (or
other target branch in the main project).
* When writing a commit message please follow [these conventions](https://tbaggery.com/2008/04/19/a-note-about-git-commit-messages.html),
if you are fixing an existing issue please add `Fixes gh-XXXX` at the end of the commit
message (where XXXX is the issue number).
-20
View File
@@ -1,20 +0,0 @@
<!--
Thanks for raising a Spring Cloud issue. What sort of issue are you raising?
Question
Please ask questions about how to use something, or to understand why something isn't
working as you expect it to, on Stack Overflow using the spring-cloud tag.
Bug report
Please provide details of the problem, including the version of Spring Cloud that you
are using. If possible, please provide a test case or sample application that reproduces
the problem. This makes it much easier for us to diagnose the problem and to verify that
we have fixed it.
Enhancement
Please start by describing the problem that you are trying to solve. There may already
be a solution, or there may be a way to solve it that you hadn't considered.
-->
-17
View File
@@ -1,17 +0,0 @@
---
name: Bug report
about: Create a report to help us improve
title: ''
labels: ''
assignees: ''
---
**Describe the bug**
Please provide details of the problem, including the version of Spring Cloud that you
are using.
**Sample**
If possible, please provide a test case or sample application that reproduces
the problem. This makes it much easier for us to diagnose the problem and to verify that
we have fixed it.
-20
View File
@@ -1,20 +0,0 @@
---
name: Feature request
about: Suggest an idea for this project
title: ''
labels: ''
assignees: ''
---
**Is your feature request related to a problem? Please describe.**
A clear and concise description of what the problem is. Ex. I'm always frustrated when [...]
**Describe the solution you'd like**
A clear and concise description of what you want to happen.
**Describe alternatives you've considered**
A clear and concise description of any alternative solutions or features you've considered.
**Additional context**
Add any other context or screenshots about the feature request here.
-33
View File
@@ -1,33 +0,0 @@
# This workflow will build a Java project with Maven
# For more information see: https://help.github.com/actions/language-and-framework-guides/building-and-testing-java-with-maven
name: Build
on:
push:
branches: [ main ]
pull_request:
branches: [ main ]
jobs:
build:
runs-on: ubuntu-latest
strategy:
matrix:
java: ["17"]
steps:
- uses: actions/checkout@v2
- name: Set up JDK ${{ matrix.java }}
uses: actions/setup-java@v2
with:
distribution: 'zulu'
java-version: ${{ matrix.java }}
cache: 'maven'
- name: Build with Maven
run: ./mvnw clean install -B -U -P sonar
- uses: codecov/codecov-action@v1
with:
fail_ci_if_error: true
+12 -10
View File
@@ -7,17 +7,19 @@
.settings/ .settings/
.springBeans .springBeans
target/ target/
bin/
_site/ _site/
.idea .idea
*.iml *.iml
*.ipr
*.iws
.factorypath
*.log
.shelf
*.swp *.swp
*.swo .factorypath
.vscode/ *.logtjmeter
.flattened-pom.xml .checkstyle
*.log
.DS_Store
/spring-cloud-sleuth-core/nb-configuration.xml
/spring-cloud-sleuth-core/nbactions.xml
*.sw[op]
.project
sample-pages
.class
antrun
-1
View File
@@ -1 +0,0 @@
-Xmx1024m -XX:CICompilerCount=1 -XX:TieredStopAtLevel=1 -Djava.security.egd=file:/dev/./urandom
-1
View File
@@ -1 +0,0 @@
-DaltSnapshotDeploymentRepository=repo.spring.io::default::https://repo.spring.io/libs-snapshot-local -P spring
BIN
View File
Binary file not shown.
-1
View File
@@ -1 +0,0 @@
distributionUrl=https://repo1.maven.org/maven2/org/apache/maven/apache-maven/3.5.0/apache-maven-3.5.0-bin.zip
+1
View File
@@ -0,0 +1 @@
spring-gh-pages
+1
View File
@@ -0,0 +1 @@
ruby-2.2.0
-3
View File
@@ -1,3 +0,0 @@
# Enable auto-env through the sdkman_auto_env config
# Add key=value pairs of SDKs to use below
java=17.0.1-tem
-68
View File
@@ -1,68 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<settings>
<servers>
<server>
<id>repo.spring.io</id>
<username>${env.CI_DEPLOY_USERNAME}</username>
<password>${env.CI_DEPLOY_PASSWORD}</password>
</server>
</servers>
<profiles>
<profile>
<!--
N.B. this profile is only here to support users and IDEs that do not use Maven 3.3.
It isn't needed on the command line if you use the wrapper script (mvnw) or if you use
a native Maven with the right version. Eclipse users should points their Maven tooling to
this settings file, or copy the profile into their ~/.m2/settings.xml.
-->
<id>spring</id>
<activation>
<activeByDefault>true</activeByDefault>
</activation>
<repositories>
<repository>
<id>spring-snapshots</id>
<name>Spring Snapshots</name>
<url>https://repo.spring.io/libs-snapshot-local</url>
<snapshots>
<enabled>true</enabled>
</snapshots>
</repository>
<repository>
<id>spring-milestones</id>
<name>Spring Milestones</name>
<url>https://repo.spring.io/libs-milestone-local</url>
<snapshots>
<enabled>false</enabled>
</snapshots>
</repository>
<repository>
<id>spring-releases</id>
<name>Spring Releases</name>
<url>https://repo.spring.io/release</url>
<snapshots>
<enabled>false</enabled>
</snapshots>
</repository>
</repositories>
<pluginRepositories>
<pluginRepository>
<id>spring-snapshots</id>
<name>Spring Snapshots</name>
<url>https://repo.spring.io/libs-snapshot-local</url>
<snapshots>
<enabled>true</enabled>
</snapshots>
</pluginRepository>
<pluginRepository>
<id>spring-milestones</id>
<name>Spring Milestones</name>
<url>https://repo.spring.io/libs-milestone-local</url>
<snapshots>
<enabled>false</enabled>
</snapshots>
</pluginRepository>
</pluginRepositories>
</profile>
</profiles>
</settings>
View File
+3
View File
@@ -0,0 +1,3 @@
{
"java.configuration.updateBuildConfiguration": "automatic"
}
+35
View File
@@ -0,0 +1,35 @@
/*
code highlight CSS resemblign the Eclipse IDE default color schema
@author Costin Leau
*/
.hl-keyword {
color: #7F0055;
font-weight: bold;
}
.hl-comment {
color: #3F5F5F;
font-style: italic;
}
.hl-multiline-comment {
color: #3F5FBF;
font-style: italic;
}
.hl-tag {
color: #3F7F7F;
}
.hl-attribute {
color: #7F007F;
}
.hl-value {
color: #2A00FF;
}
.hl-string {
color: #2A00FF;
}
+9
View File
@@ -0,0 +1,9 @@
@IMPORT url("manual.css");
body.firstpage {
background: url("../images/background.png") no-repeat center top;
}
div.part h1 {
border-top: none;
}
+6
View File
@@ -0,0 +1,6 @@
@IMPORT url("manual.css");
body {
background: url("../images/background.png") no-repeat center top;
}
+344
View File
@@ -0,0 +1,344 @@
@IMPORT url("highlight.css");
html {
padding: 0pt;
margin: 0pt;
}
body {
color: #333333;
margin: 15px 30px;
font-family: Helvetica, Arial, Freesans, Clean, Sans-serif;
line-height: 1.6;
-webkit-font-smoothing: antialiased;
}
code {
font-size: 16px;
font-family: Consolas, "Liberation Mono", Courier, monospace;
}
:not(a)>code {
color: #6D180B;
}
:not(pre)>code {
background-color: #F2F2F2;
border: 1px solid #CCCCCC;
border-radius: 4px;
padding: 1px 3px 0;
text-shadow: none;
white-space: nowrap;
}
body>*:first-child {
margin-top: 0 !important;
}
div {
margin: 0pt;
}
hr {
border: 1px solid #CCCCCC;
background: #CCCCCC;
}
h1,h2,h3,h4,h5,h6 {
color: #000000;
cursor: text;
font-weight: bold;
margin: 30px 0 10px;
padding: 0;
}
h1,h2,h3 {
margin: 40px 0 10px;
}
h1 {
margin: 70px 0 30px;
padding-top: 20px;
}
div.part h1 {
border-top: 1px dotted #CCCCCC;
}
h1,h1 code {
font-size: 32px;
}
h2,h2 code {
font-size: 24px;
}
h3,h3 code {
font-size: 20px;
}
h4,h1 code,h5,h5 code,h6,h6 code {
font-size: 18px;
}
div.book,div.chapter,div.appendix,div.part,div.preface {
min-width: 300px;
max-width: 1200px;
margin: 0 auto;
}
p.releaseinfo {
font-weight: bold;
margin-bottom: 40px;
margin-top: 40px;
}
div.authorgroup {
line-height: 1;
}
p.copyright {
line-height: 1;
margin-bottom: -5px;
}
.legalnotice p {
font-style: italic;
font-size: 14px;
line-height: 1;
}
div.titlepage+p,div.titlepage+p {
margin-top: 0;
}
pre {
line-height: 1.0;
color: black;
}
a {
color: #4183C4;
text-decoration: none;
}
p {
margin: 15px 0;
text-align: left;
}
ul,ol {
padding-left: 30px;
}
li p {
margin: 0;
}
div.table {
margin: 1em;
padding: 0.5em;
text-align: center;
}
div.table table,div.informaltable table {
display: table;
width: 100%;
}
div.table td {
padding-left: 7px;
padding-right: 7px;
}
.sidebar {
line-height: 1.4;
padding: 0 20px;
background-color: #F8F8F8;
border: 1px solid #CCCCCC;
border-radius: 3px 3px 3px 3px;
}
.sidebar p.title {
color: #6D180B;
}
pre.programlisting,pre.screen {
font-size: 15px;
padding: 6px 10px;
background-color: #F8F8F8;
border: 1px solid #CCCCCC;
border-radius: 3px 3px 3px 3px;
clear: both;
overflow: auto;
line-height: 1.4;
font-family: Consolas, "Liberation Mono", Courier, monospace;
}
table {
border-collapse: collapse;
border-spacing: 0;
border: 1px solid #DDDDDD !important;
border-radius: 4px !important;
border-collapse: separate !important;
line-height: 1.6;
}
table thead {
background: #F5F5F5;
}
table tr {
border: none;
border-bottom: none;
}
table th {
font-weight: bold;
}
table th,table td {
border: none !important;
padding: 6px 13px;
}
table tr:nth-child(2n) {
background-color: #F8F8F8;
}
td p {
margin: 0 0 15px 0;
}
div.table-contents td p {
margin: 0;
}
div.important *,div.note *,div.tip *,div.warning *,div.navheader *,div.navfooter *,div.calloutlist *
{
border: none !important;
background: none !important;
margin: 0;
}
div.important p,div.note p,div.tip p,div.warning p {
color: #6F6F6F;
line-height: 1.6;
}
div.important code,div.note code,div.tip code,div.warning code {
background-color: #F2F2F2 !important;
border: 1px solid #CCCCCC !important;
border-radius: 4px !important;
padding: 1px 3px 0 !important;
text-shadow: none !important;
white-space: nowrap !important;
}
.note th,.tip th,.warning th {
display: none;
}
.note tr:first-child td,.tip tr:first-child td,.warning tr:first-child td
{
border-right: 1px solid #CCCCCC !important;
padding-top: 10px;
}
div.calloutlist p,div.calloutlist td {
padding: 0;
margin: 0;
}
div.calloutlist>table>tbody>tr>td:first-child {
padding-left: 10px;
width: 30px !important;
}
div.important,div.note,div.tip,div.warning {
margin-left: 0px !important;
margin-right: 20px !important;
margin-top: 20px;
margin-bottom: 20px;
padding-top: 10px;
padding-bottom: 10px;
}
div.toc {
line-height: 1.2;
}
dl,dt {
margin-top: 1px;
margin-bottom: 0;
}
div.toc>dl>dt {
font-size: 32px;
font-weight: bold;
margin: 30px 0 10px 0;
display: block;
}
div.toc>dl>dd>dl>dt {
font-size: 24px;
font-weight: bold;
margin: 20px 0 10px 0;
display: block;
}
div.toc>dl>dd>dl>dd>dl>dt {
font-weight: bold;
font-size: 20px;
margin: 10px 0 0 0;
}
tbody.footnotes * {
border: none !important;
}
div.footnote p {
margin: 0;
line-height: 1;
}
div.footnote p sup {
margin-right: 6px;
vertical-align: middle;
}
div.navheader {
border-bottom: 1px solid #CCCCCC;
}
div.navfooter {
border-top: 1px solid #CCCCCC;
}
.title {
margin-left: -1em;
padding-left: 1em;
}
.title>a {
position: absolute;
visibility: hidden;
display: block;
font-size: 0.85em;
margin-top: 0.05em;
margin-left: -1em;
vertical-align: text-top;
color: black;
}
.title>a:before {
content: "\00A7";
}
.title:hover>a,.title>a:hover,.title:hover>a:hover {
visibility: visible;
}
.title:focus>a,.title>a:focus,.title:focus>a:focus {
outline: 0;
}
+5 -5
View File
@@ -39,7 +39,7 @@ function check_if_anything_to_sync() {
} }
function retrieve_current_branch() { function retrieve_current_branch() {
# Code getting the name of the current branch. For main we want to publish as we did until now # Code getting the name of the current branch. For master we want to publish as we did until now
# https://stackoverflow.com/questions/1593051/how-to-programmatically-determine-the-current-checked-out-git-branch # https://stackoverflow.com/questions/1593051/how-to-programmatically-determine-the-current-checked-out-git-branch
# If there is a branch already passed will reuse it - otherwise will try to find it # If there is a branch already passed will reuse it - otherwise will try to find it
CURRENT_BRANCH=${BRANCH} CURRENT_BRANCH=${BRANCH}
@@ -134,8 +134,8 @@ function add_docs_from_target() {
# Copies the docs by using the retrieved properties from Maven build # Copies the docs by using the retrieved properties from Maven build
function copy_docs_for_current_version() { function copy_docs_for_current_version() {
if [[ "${CURRENT_BRANCH}" == "main" ]] ; then if [[ "${CURRENT_BRANCH}" == "master" ]] ; then
echo -e "Current branch is main - will copy the current docs only to the root folder" echo -e "Current branch is master - will copy the current docs only to the root folder"
for f in docs/target/generated-docs/*; do for f in docs/target/generated-docs/*; do
file=${f#docs/target/generated-docs/*} file=${f#docs/target/generated-docs/*}
if ! git ls-files -i -o --exclude-standard --directory | grep -q ^$file$; then if ! git ls-files -i -o --exclude-standard --directory | grep -q ^$file$; then
@@ -216,7 +216,7 @@ function commit_changes_if_applicable() {
git commit -a -m "Sync docs from ${CURRENT_BRANCH} to gh-pages" && COMMIT_SUCCESSFUL="yes" || echo "Failed to commit changes" git commit -a -m "Sync docs from ${CURRENT_BRANCH} to gh-pages" && COMMIT_SUCCESSFUL="yes" || echo "Failed to commit changes"
# Uncomment the following push if you want to auto push to # Uncomment the following push if you want to auto push to
# the gh-pages branch whenever you commit to main locally. # the gh-pages branch whenever you commit to master locally.
# This is a little extreme. Use with care! # This is a little extreme. Use with care!
################################################################### ###################################################################
if [[ "${COMMIT_SUCCESSFUL}" == "yes" ]] ; then if [[ "${COMMIT_SUCCESSFUL}" == "yes" ]] ; then
@@ -249,7 +249,7 @@ The idea of this script is to update gh-pages branch with the generated docs. Wi
the script will work in the following manner: the script will work in the following manner:
- if there's no gh-pages / target for docs module then the script ends - if there's no gh-pages / target for docs module then the script ends
- for main branch the generated docs are copied to the root of gh-pages branch - for master branch the generated docs are copied to the root of gh-pages branch
- for any other branch (if that branch is whitelisted) a subfolder with branch name is created - for any other branch (if that branch is whitelisted) a subfolder with branch name is created
and docs are copied there and docs are copied there
- if the version switch is passed (-v) then a tag with (v) prefix will be retrieved and a folder - if the version switch is passed (-v) then a tag with (v) prefix will be retrieved and a folder
Binary file not shown.

After

Width:  |  Height:  |  Size: 18 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 329 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 353 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 350 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 931 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.1 KiB

+117
View File
@@ -0,0 +1,117 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<!--[if IE]><meta http-equiv="X-UA-Compatible" content="IE=edge"><![endif]-->
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta name="generator" content="Asciidoctor 1.5.5">
<title>spring-cloud-openfeign</title>
<link rel="stylesheet" href="css/manual-singlepage.css">
<style>
.hidden {
display: none;
}
.switch {
border-width: 1px 1px 0 1px;
border-style: solid;
border-color: #7a2518;
display: inline-block;
}
.switch--item {
padding: 10px;
background-color: #ffffff;
color: #7a2518;
display: inline-block;
cursor: pointer;
}
.switch--item.selected {
background-color: #7a2519;
color: #ffffff;
}
</style>
<script src="http://cdnjs.cloudflare.com/ajax/libs/zepto/1.2.0/zepto.min.js"></script>
<script type="text/javascript">
function addBlockSwitches() {
$('.primary').each(function() {
primary = $(this);
createSwitchItem(primary, createBlockSwitch(primary)).item.addClass("selected");
primary.children('.title').remove();
});
$('.secondary').each(function(idx, node) {
secondary = $(node);
primary = findPrimary(secondary);
switchItem = createSwitchItem(secondary, primary.children('.switch'));
switchItem.content.addClass('hidden');
findPrimary(secondary).append(switchItem.content);
secondary.remove();
});
}
function createBlockSwitch(primary) {
blockSwitch = $('<div class="switch"></div>');
primary.prepend(blockSwitch);
return blockSwitch;
}
function findPrimary(secondary) {
candidate = secondary.prev();
while (!candidate.is('.primary')) {
candidate = candidate.prev();
}
return candidate;
}
function createSwitchItem(block, blockSwitch) {
blockName = block.children('.title').text();
content = block.children('.content').first().append(block.next('.colist'));
item = $('<div class="switch--item">' + blockName + '</div>');
item.on('click', '', content, function(e) {
$(this).addClass('selected');
$(this).siblings().removeClass('selected');
e.data.siblings('.content').addClass('hidden');
e.data.removeClass('hidden');
});
blockSwitch.append(item);
return {'item': item, 'content': content};
}
$(addBlockSwitches);
</script>
</head>
<body class="article">
<div id="header">
<h1>spring-cloud-openfeign</h1>
</div>
<div id="content">
<div id="preamble">
<div class="sectionbody">
<div class="paragraph">
<p>2.0.5.BUILD-SNAPSHOT</p>
</div>
</div>
</div>
<div class="sect1">
<h2 id="_pick_the_documentation_option">Pick The Documentation Option</h2>
<div class="sectionbody">
<div class="ulist">
<ul>
<li>
<p><a href="single/spring-cloud-openfeign.html">Single HTML</a></p>
</li>
<li>
<p><a href="multi/multi_spring-cloud-openfeign.html">Multi HTML</a></p>
</li>
</ul>
</div>
</div>
</div>
</div>
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/prettify/r298/prettify.min.css">
<script src="https://cdnjs.cloudflare.com/ajax/libs/prettify/r298/prettify.min.js"></script>
<script>prettyPrint()</script>
</body>
</html>
+35
View File
@@ -0,0 +1,35 @@
/*
code highlight CSS resemblign the Eclipse IDE default color schema
@author Costin Leau
*/
.hl-keyword {
color: #7F0055;
font-weight: bold;
}
.hl-comment {
color: #3F5F5F;
font-style: italic;
}
.hl-multiline-comment {
color: #3F5FBF;
font-style: italic;
}
.hl-tag {
color: #3F7F7F;
}
.hl-attribute {
color: #7F007F;
}
.hl-value {
color: #2A00FF;
}
.hl-string {
color: #2A00FF;
}
+9
View File
@@ -0,0 +1,9 @@
@IMPORT url("manual.css");
body.firstpage {
background: url("../images/background.png") no-repeat center top;
}
div.part h1 {
border-top: none;
}
+6
View File
@@ -0,0 +1,6 @@
@IMPORT url("manual.css");
body {
background: url("../images/background.png") no-repeat center top;
}
+344
View File
@@ -0,0 +1,344 @@
@IMPORT url("highlight.css");
html {
padding: 0pt;
margin: 0pt;
}
body {
color: #333333;
margin: 15px 30px;
font-family: Helvetica, Arial, Freesans, Clean, Sans-serif;
line-height: 1.6;
-webkit-font-smoothing: antialiased;
}
code {
font-size: 16px;
font-family: Consolas, "Liberation Mono", Courier, monospace;
}
:not(a)>code {
color: #6D180B;
}
:not(pre)>code {
background-color: #F2F2F2;
border: 1px solid #CCCCCC;
border-radius: 4px;
padding: 1px 3px 0;
text-shadow: none;
white-space: nowrap;
}
body>*:first-child {
margin-top: 0 !important;
}
div {
margin: 0pt;
}
hr {
border: 1px solid #CCCCCC;
background: #CCCCCC;
}
h1,h2,h3,h4,h5,h6 {
color: #000000;
cursor: text;
font-weight: bold;
margin: 30px 0 10px;
padding: 0;
}
h1,h2,h3 {
margin: 40px 0 10px;
}
h1 {
margin: 70px 0 30px;
padding-top: 20px;
}
div.part h1 {
border-top: 1px dotted #CCCCCC;
}
h1,h1 code {
font-size: 32px;
}
h2,h2 code {
font-size: 24px;
}
h3,h3 code {
font-size: 20px;
}
h4,h1 code,h5,h5 code,h6,h6 code {
font-size: 18px;
}
div.book,div.chapter,div.appendix,div.part,div.preface {
min-width: 300px;
max-width: 1200px;
margin: 0 auto;
}
p.releaseinfo {
font-weight: bold;
margin-bottom: 40px;
margin-top: 40px;
}
div.authorgroup {
line-height: 1;
}
p.copyright {
line-height: 1;
margin-bottom: -5px;
}
.legalnotice p {
font-style: italic;
font-size: 14px;
line-height: 1;
}
div.titlepage+p,div.titlepage+p {
margin-top: 0;
}
pre {
line-height: 1.0;
color: black;
}
a {
color: #4183C4;
text-decoration: none;
}
p {
margin: 15px 0;
text-align: left;
}
ul,ol {
padding-left: 30px;
}
li p {
margin: 0;
}
div.table {
margin: 1em;
padding: 0.5em;
text-align: center;
}
div.table table,div.informaltable table {
display: table;
width: 100%;
}
div.table td {
padding-left: 7px;
padding-right: 7px;
}
.sidebar {
line-height: 1.4;
padding: 0 20px;
background-color: #F8F8F8;
border: 1px solid #CCCCCC;
border-radius: 3px 3px 3px 3px;
}
.sidebar p.title {
color: #6D180B;
}
pre.programlisting,pre.screen {
font-size: 15px;
padding: 6px 10px;
background-color: #F8F8F8;
border: 1px solid #CCCCCC;
border-radius: 3px 3px 3px 3px;
clear: both;
overflow: auto;
line-height: 1.4;
font-family: Consolas, "Liberation Mono", Courier, monospace;
}
table {
border-collapse: collapse;
border-spacing: 0;
border: 1px solid #DDDDDD !important;
border-radius: 4px !important;
border-collapse: separate !important;
line-height: 1.6;
}
table thead {
background: #F5F5F5;
}
table tr {
border: none;
border-bottom: none;
}
table th {
font-weight: bold;
}
table th,table td {
border: none !important;
padding: 6px 13px;
}
table tr:nth-child(2n) {
background-color: #F8F8F8;
}
td p {
margin: 0 0 15px 0;
}
div.table-contents td p {
margin: 0;
}
div.important *,div.note *,div.tip *,div.warning *,div.navheader *,div.navfooter *,div.calloutlist *
{
border: none !important;
background: none !important;
margin: 0;
}
div.important p,div.note p,div.tip p,div.warning p {
color: #6F6F6F;
line-height: 1.6;
}
div.important code,div.note code,div.tip code,div.warning code {
background-color: #F2F2F2 !important;
border: 1px solid #CCCCCC !important;
border-radius: 4px !important;
padding: 1px 3px 0 !important;
text-shadow: none !important;
white-space: nowrap !important;
}
.note th,.tip th,.warning th {
display: none;
}
.note tr:first-child td,.tip tr:first-child td,.warning tr:first-child td
{
border-right: 1px solid #CCCCCC !important;
padding-top: 10px;
}
div.calloutlist p,div.calloutlist td {
padding: 0;
margin: 0;
}
div.calloutlist>table>tbody>tr>td:first-child {
padding-left: 10px;
width: 30px !important;
}
div.important,div.note,div.tip,div.warning {
margin-left: 0px !important;
margin-right: 20px !important;
margin-top: 20px;
margin-bottom: 20px;
padding-top: 10px;
padding-bottom: 10px;
}
div.toc {
line-height: 1.2;
}
dl,dt {
margin-top: 1px;
margin-bottom: 0;
}
div.toc>dl>dt {
font-size: 32px;
font-weight: bold;
margin: 30px 0 10px 0;
display: block;
}
div.toc>dl>dd>dl>dt {
font-size: 24px;
font-weight: bold;
margin: 20px 0 10px 0;
display: block;
}
div.toc>dl>dd>dl>dd>dl>dt {
font-weight: bold;
font-size: 20px;
margin: 10px 0 0 0;
}
tbody.footnotes * {
border: none !important;
}
div.footnote p {
margin: 0;
line-height: 1;
}
div.footnote p sup {
margin-right: 6px;
vertical-align: middle;
}
div.navheader {
border-bottom: 1px solid #CCCCCC;
}
div.navfooter {
border-top: 1px solid #CCCCCC;
}
.title {
margin-left: -1em;
padding-left: 1em;
}
.title>a {
position: absolute;
visibility: hidden;
display: block;
font-size: 0.85em;
margin-top: 0.05em;
margin-left: -1em;
vertical-align: text-top;
color: black;
}
.title>a:before {
content: "\00A7";
}
.title:hover>a,.title>a:hover,.title:hover>a:hover {
visibility: visible;
}
.title:focus>a,.title>a:focus,.title:focus>a:focus {
outline: 0;
}
Binary file not shown.

After

Width:  |  Height:  |  Size: 18 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 329 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 353 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 350 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 931 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.1 KiB

+4
View File
@@ -0,0 +1,4 @@
<html><head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title></title><link rel="stylesheet" type="text/css" href="css/manual-multipage.css"><meta name="generator" content="DocBook XSL Stylesheets V1.78.1"><link rel="home" href="multi_spring-cloud-openfeign.html" title="Spring Cloud OpenFeign"><link rel="up" href="multi_spring-cloud-openfeign.html" title="Spring Cloud OpenFeign"><link rel="prev" href="multi_spring-cloud-openfeign.html" title="Spring Cloud OpenFeign"><link rel="next" href="multi_spring-cloud-feign.html" title="1.&nbsp;Declarative REST Client: Feign"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center"></th></tr><tr><td width="20%" align="left"><a accesskey="p" href="multi_spring-cloud-openfeign.html">Prev</a>&nbsp;</td><th width="60%" align="center">&nbsp;</th><td width="20%" align="right">&nbsp;<a accesskey="n" href="multi_spring-cloud-feign.html">Next</a></td></tr></table><hr></div><div class="preface"><div class="titlepage"><div><div><h1 class="title"><a name="d0e9" href="#d0e9"></a></h1></div></div></div><p><span class="strong"><strong>2.0.5.BUILD-SNAPSHOT</strong></span></p><p>This project provides OpenFeign integrations for Spring Boot apps through autoconfiguration
and binding to the Spring Environment and other Spring programming model idioms.</p></div><div class="navfooter"><hr><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="multi_spring-cloud-openfeign.html">Prev</a>&nbsp;</td><td width="20%" align="center">&nbsp;</td><td width="40%" align="right">&nbsp;<a accesskey="n" href="multi_spring-cloud-feign.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Spring Cloud OpenFeign&nbsp;</td><td width="20%" align="center"><a accesskey="h" href="multi_spring-cloud-openfeign.html">Home</a></td><td width="40%" align="right" valign="top">&nbsp;1.&nbsp;Declarative REST Client: Feign</td></tr></table></div></body></html>
+192
View File
@@ -0,0 +1,192 @@
<html><head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>1.&nbsp;Declarative REST Client: Feign</title><link rel="stylesheet" type="text/css" href="css/manual-multipage.css"><meta name="generator" content="DocBook XSL Stylesheets V1.78.1"><link rel="home" href="multi_spring-cloud-openfeign.html" title="Spring Cloud OpenFeign"><link rel="up" href="multi_spring-cloud-openfeign.html" title="Spring Cloud OpenFeign"><link rel="prev" href="multi_pr01.html" title=""></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">1.&nbsp;Declarative REST Client: Feign</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="multi_pr01.html">Prev</a>&nbsp;</td><th width="60%" align="center">&nbsp;</th><td width="20%" align="right">&nbsp;</td></tr></table><hr></div><div class="chapter"><div class="titlepage"><div><div><h1 class="title"><a name="spring-cloud-feign" href="#spring-cloud-feign"></a>1.&nbsp;Declarative REST Client: Feign</h1></div></div></div><p><a class="link" href="https://github.com/Netflix/feign" target="_top">Feign</a> is a declarative web service client. It makes writing web service clients easier. To use Feign create an interface and annotate it. It has pluggable annotation support including Feign annotations and JAX-RS annotations. Feign also supports pluggable encoders and decoders. Spring Cloud adds support for Spring MVC annotations and for using the same <code class="literal">HttpMessageConverters</code> used by default in Spring Web. Spring Cloud integrates Ribbon and Eureka to provide a load balanced http client when using Feign.</p><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="netflix-feign-starter" href="#netflix-feign-starter"></a>1.1&nbsp;How to Include Feign</h2></div></div></div><p>To include Feign in your project use the starter with group <code class="literal">org.springframework.cloud</code>
and artifact id <code class="literal">spring-cloud-starter-openfeign</code>. See the <a class="link" href="https://projects.spring.io/spring-cloud/" target="_top">Spring Cloud Project page</a>
for details on setting up your build system with the current Spring Cloud Release Train.</p><p>Example spring boot app</p><pre class="programlisting"><em><span class="hl-annotation" style="color: gray">@SpringBootApplication</span></em>
<em><span class="hl-annotation" style="color: gray">@EnableFeignClients</span></em>
<span xmlns:d="http://docbook.org/ns/docbook" class="hl-keyword">public</span> <span xmlns:d="http://docbook.org/ns/docbook" class="hl-keyword">class</span> Application {
<span xmlns:d="http://docbook.org/ns/docbook" class="hl-keyword">public</span> <span xmlns:d="http://docbook.org/ns/docbook" class="hl-keyword">static</span> <span xmlns:d="http://docbook.org/ns/docbook" class="hl-keyword">void</span> main(String[] args) {
SpringApplication.run(Application.<span xmlns:d="http://docbook.org/ns/docbook" class="hl-keyword">class</span>, args);
}
}</pre><p><b>StoreClient.java.&nbsp;</b>
</p><pre class="programlisting"><em><span class="hl-annotation" style="color: gray">@FeignClient("stores")</span></em>
<span xmlns:d="http://docbook.org/ns/docbook" class="hl-keyword">public</span> <span xmlns:d="http://docbook.org/ns/docbook" class="hl-keyword">interface</span> StoreClient {
<em><span class="hl-annotation" style="color: gray">@RequestMapping(method = RequestMethod.GET, value = "/stores")</span></em>
List&lt;Store&gt; getStores();
<em><span class="hl-annotation" style="color: gray">@RequestMapping(method = RequestMethod.POST, value = "/stores/{storeId}", consumes = "application/json")</span></em>
Store update(<em><span class="hl-annotation" style="color: gray">@PathVariable("storeId")</span></em> Long storeId, Store store);
}</pre><p>
</p><p>In the <code class="literal">@FeignClient</code> annotation the String value ("stores" above) is
an arbitrary client name, which is used to create a Ribbon load
balancer (see <a class="link" href="">below for details of Ribbon
support</a>). You can also specify a URL using the <code class="literal">url</code> attribute
(absolute value or just a hostname). The name of the bean in the
application context is the fully qualified name of the interface.
To specify your own alias value you can use the <code class="literal">qualifier</code> value
of the <code class="literal">@FeignClient</code> annotation.</p><p>The Ribbon client above will want to discover the physical addresses
for the "stores" service. If your application is a Eureka client then
it will resolve the service in the Eureka service registry. If you
don&#8217;t want to use Eureka, you can simply configure a list of servers
in your external configuration (see
<a class="link" href="">above for example</a>).</p></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="spring-cloud-feign-overriding-defaults" href="#spring-cloud-feign-overriding-defaults"></a>1.2&nbsp;Overriding Feign Defaults</h2></div></div></div><p>A central concept in Spring Cloud&#8217;s Feign support is that of the named client. Each feign client is part of an ensemble of components that work together to contact a remote server on demand, and the ensemble has a name that you give it as an application developer using the <code class="literal">@FeignClient</code> annotation. Spring Cloud creates a new ensemble as an
<code class="literal">ApplicationContext</code> on demand for each named client using <code class="literal">FeignClientsConfiguration</code>. This contains (amongst other things) an <code class="literal">feign.Decoder</code>, a <code class="literal">feign.Encoder</code>, and a <code class="literal">feign.Contract</code>.</p><p>Spring Cloud lets you take full control of the feign client by declaring additional configuration (on top of the <code class="literal">FeignClientsConfiguration</code>) using <code class="literal">@FeignClient</code>. Example:</p><pre class="programlisting"><em><span class="hl-annotation" style="color: gray">@FeignClient(name = "stores", configuration = FooConfiguration.class)</span></em>
<span xmlns:d="http://docbook.org/ns/docbook" class="hl-keyword">public</span> <span xmlns:d="http://docbook.org/ns/docbook" class="hl-keyword">interface</span> StoreClient {
<span xmlns:d="http://docbook.org/ns/docbook" class="hl-comment">//..</span>
}</pre><p>In this case the client is composed from the components already in <code class="literal">FeignClientsConfiguration</code> together with any in <code class="literal">FooConfiguration</code> (where the latter will override the former).</p><div class="note" style="margin-left: 0.5in; margin-right: 0.5in;"><table border="0" summary="Note"><tr><td rowspan="2" align="center" valign="top" width="25"><img alt="[Note]" src="images/note.png"></td><th align="left">Note</th></tr><tr><td align="left" valign="top"><p><code class="literal">FooConfiguration</code> does not need to be annotated with <code class="literal">@Configuration</code>. However, if it is, then take care to exclude it from any <code class="literal">@ComponentScan</code> that would otherwise include this configuration as it will become the default source for <code class="literal">feign.Decoder</code>, <code class="literal">feign.Encoder</code>, <code class="literal">feign.Contract</code>, etc., when specified. This can be avoided by putting it in a separate, non-overlapping package from any <code class="literal">@ComponentScan</code> or <code class="literal">@SpringBootApplication</code>, or it can be explicitly excluded in <code class="literal">@ComponentScan</code>.</p></td></tr></table></div><div class="note" style="margin-left: 0.5in; margin-right: 0.5in;"><table border="0" summary="Note"><tr><td rowspan="2" align="center" valign="top" width="25"><img alt="[Note]" src="images/note.png"></td><th align="left">Note</th></tr><tr><td align="left" valign="top"><p>The <code class="literal">serviceId</code> attribute is now deprecated in favor of the <code class="literal">name</code> attribute.</p></td></tr></table></div><div class="warning" style="margin-left: 0.5in; margin-right: 0.5in;"><table border="0" summary="Warning"><tr><td rowspan="2" align="center" valign="top" width="25"><img alt="[Warning]" src="images/warning.png"></td><th align="left">Warning</th></tr><tr><td align="left" valign="top"><p>Previously, using the <code class="literal">url</code> attribute, did not require the <code class="literal">name</code> attribute. Using <code class="literal">name</code> is now required.</p></td></tr></table></div><p>Placeholders are supported in the <code class="literal">name</code> and <code class="literal">url</code> attributes.</p><pre class="programlisting"><em><span class="hl-annotation" style="color: gray">@FeignClient(name = "${feign.name}", url = "${feign.url}")</span></em>
<span xmlns:d="http://docbook.org/ns/docbook" class="hl-keyword">public</span> <span xmlns:d="http://docbook.org/ns/docbook" class="hl-keyword">interface</span> StoreClient {
<span xmlns:d="http://docbook.org/ns/docbook" class="hl-comment">//..</span>
}</pre><p>Spring Cloud Netflix provides the following beans by default for feign (<code class="literal">BeanType</code> beanName: <code class="literal">ClassName</code>):</p><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem"><code class="literal">Decoder</code> feignDecoder: <code class="literal">ResponseEntityDecoder</code> (which wraps a <code class="literal">SpringDecoder</code>)</li><li class="listitem"><code class="literal">Encoder</code> feignEncoder: <code class="literal">SpringEncoder</code></li><li class="listitem"><code class="literal">Logger</code> feignLogger: <code class="literal">Slf4jLogger</code></li><li class="listitem"><code class="literal">Contract</code> feignContract: <code class="literal">SpringMvcContract</code></li><li class="listitem"><code class="literal">Feign.Builder</code> feignBuilder: <code class="literal">HystrixFeign.Builder</code></li><li class="listitem"><code class="literal">Client</code> feignClient: if Ribbon is enabled it is a <code class="literal">LoadBalancerFeignClient</code>, otherwise the default feign client is used.</li></ul></div><p>The OkHttpClient and ApacheHttpClient feign clients can be used by setting <code class="literal">feign.okhttp.enabled</code> or <code class="literal">feign.httpclient.enabled</code> to <code class="literal">true</code>, respectively, and having them on the classpath.
You can customize the HTTP client used by providing a bean of either <code class="literal">ClosableHttpClient</code> when using Apache or <code class="literal">OkHttpClient</code> when using OK HTTP.</p><p>Spring Cloud Netflix <span class="emphasis"><em>does not</em></span> provide the following beans by default for feign, but still looks up beans of these types from the application context to create the feign client:</p><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem"><code class="literal">Logger.Level</code></li><li class="listitem"><code class="literal">Retryer</code></li><li class="listitem"><code class="literal">ErrorDecoder</code></li><li class="listitem"><code class="literal">Request.Options</code></li><li class="listitem"><code class="literal">Collection&lt;RequestInterceptor&gt;</code></li><li class="listitem"><code class="literal">SetterFactory</code></li></ul></div><p>Creating a bean of one of those type and placing it in a <code class="literal">@FeignClient</code> configuration (such as <code class="literal">FooConfiguration</code> above) allows you to override each one of the beans described. Example:</p><pre class="programlisting"><em><span class="hl-annotation" style="color: gray">@Configuration</span></em>
<span xmlns:d="http://docbook.org/ns/docbook" class="hl-keyword">public</span> <span xmlns:d="http://docbook.org/ns/docbook" class="hl-keyword">class</span> FooConfiguration {
<em><span class="hl-annotation" style="color: gray">@Bean</span></em>
<span xmlns:d="http://docbook.org/ns/docbook" class="hl-keyword">public</span> Contract feignContract() {
<span xmlns:d="http://docbook.org/ns/docbook" class="hl-keyword">return</span> <span xmlns:d="http://docbook.org/ns/docbook" class="hl-keyword">new</span> feign.Contract.Default();
}
<em><span class="hl-annotation" style="color: gray">@Bean</span></em>
<span xmlns:d="http://docbook.org/ns/docbook" class="hl-keyword">public</span> BasicAuthRequestInterceptor basicAuthRequestInterceptor() {
<span xmlns:d="http://docbook.org/ns/docbook" class="hl-keyword">return</span> <span xmlns:d="http://docbook.org/ns/docbook" class="hl-keyword">new</span> BasicAuthRequestInterceptor(<span xmlns:d="http://docbook.org/ns/docbook" class="hl-string">"user"</span>, <span xmlns:d="http://docbook.org/ns/docbook" class="hl-string">"password"</span>);
}
}</pre><p>This replaces the <code class="literal">SpringMvcContract</code> with <code class="literal">feign.Contract.Default</code> and adds a <code class="literal">RequestInterceptor</code> to the collection of <code class="literal">RequestInterceptor</code>.</p><p><code class="literal">@FeignClient</code> also can be configured using configuration properties.</p><p>application.yml</p><pre class="programlisting"><span xmlns:d="http://docbook.org/ns/docbook" class="hl-attribute">feign</span>:
<span xmlns:d="http://docbook.org/ns/docbook" class="hl-attribute"> client</span>:
<span xmlns:d="http://docbook.org/ns/docbook" class="hl-attribute"> config</span>:
<span xmlns:d="http://docbook.org/ns/docbook" class="hl-attribute"> feignName</span>:
<span xmlns:d="http://docbook.org/ns/docbook" class="hl-attribute"> connectTimeout</span>: <span class="hl-number">5000</span>
<span xmlns:d="http://docbook.org/ns/docbook" class="hl-attribute"> readTimeout</span>: <span class="hl-number">5000</span>
<span xmlns:d="http://docbook.org/ns/docbook" class="hl-attribute"> loggerLevel</span>: full
<span xmlns:d="http://docbook.org/ns/docbook" class="hl-attribute"> errorDecoder</span>: com.example.SimpleErrorDecoder
<span xmlns:d="http://docbook.org/ns/docbook" class="hl-attribute"> retryer</span>: com.example.SimpleRetryer
<span xmlns:d="http://docbook.org/ns/docbook" class="hl-attribute"> requestInterceptors</span>:
- com.example.FooRequestInterceptor
- com.example.BarRequestInterceptor
<span xmlns:d="http://docbook.org/ns/docbook" class="hl-attribute"> decode404</span>: <span xmlns:d="http://docbook.org/ns/docbook" class="hl-keyword">false</span>
<span xmlns:d="http://docbook.org/ns/docbook" class="hl-attribute"> encoder</span>: com.example.SimpleEncoder
<span xmlns:d="http://docbook.org/ns/docbook" class="hl-attribute"> decoder</span>: com.example.SimpleDecoder
<span xmlns:d="http://docbook.org/ns/docbook" class="hl-attribute"> contract</span>: com.example.SimpleContract</pre><p>Default configurations can be specified in the <code class="literal">@EnableFeignClients</code> attribute <code class="literal">defaultConfiguration</code> in a similar manner as described above. The difference is that this configuration will apply to <span class="emphasis"><em>all</em></span> feign clients.</p><p>If you prefer using configuration properties to configured all <code class="literal">@FeignClient</code>, you can create configuration properties with <code class="literal">default</code> feign name.</p><p>application.yml</p><pre class="programlisting"><span xmlns:d="http://docbook.org/ns/docbook" class="hl-attribute">feign</span>:
<span xmlns:d="http://docbook.org/ns/docbook" class="hl-attribute"> client</span>:
<span xmlns:d="http://docbook.org/ns/docbook" class="hl-attribute"> config</span>:
<span xmlns:d="http://docbook.org/ns/docbook" class="hl-attribute"> default</span>:
<span xmlns:d="http://docbook.org/ns/docbook" class="hl-attribute"> connectTimeout</span>: <span class="hl-number">5000</span>
<span xmlns:d="http://docbook.org/ns/docbook" class="hl-attribute"> readTimeout</span>: <span class="hl-number">5000</span>
<span xmlns:d="http://docbook.org/ns/docbook" class="hl-attribute"> loggerLevel</span>: basic</pre><p>If we create both <code class="literal">@Configuration</code> bean and configuration properties, configuration properties will win.
It will override <code class="literal">@Configuration</code> values. But if you want to change the priority to <code class="literal">@Configuration</code>,
you can change <code class="literal">feign.client.default-to-properties</code> to <code class="literal">false</code>.</p><div class="note" style="margin-left: 0.5in; margin-right: 0.5in;"><table border="0" summary="Note"><tr><td rowspan="2" align="center" valign="top" width="25"><img alt="[Note]" src="images/note.png"></td><th align="left">Note</th></tr><tr><td align="left" valign="top"><p>If you need to use <code class="literal">ThreadLocal</code> bound variables in your <code class="literal">RequestInterceptor`s you will need to either set the
thread isolation strategy for Hystrix to `SEMAPHORE</code> or disable Hystrix in Feign.</p></td></tr></table></div><p>application.yml</p><pre class="programlisting"><span xmlns:d="http://docbook.org/ns/docbook" class="hl-comment"># To disable Hystrix in Feign</span>
<span xmlns:d="http://docbook.org/ns/docbook" class="hl-attribute">feign</span>:
<span xmlns:d="http://docbook.org/ns/docbook" class="hl-attribute"> hystrix</span>:
<span xmlns:d="http://docbook.org/ns/docbook" class="hl-attribute"> enabled</span>: <span xmlns:d="http://docbook.org/ns/docbook" class="hl-keyword">false</span>
<span xmlns:d="http://docbook.org/ns/docbook" class="hl-comment"># To set thread isolation to SEMAPHORE</span>
<span xmlns:d="http://docbook.org/ns/docbook" class="hl-attribute">hystrix</span>:
<span xmlns:d="http://docbook.org/ns/docbook" class="hl-attribute"> command</span>:
<span xmlns:d="http://docbook.org/ns/docbook" class="hl-attribute"> default</span>:
<span xmlns:d="http://docbook.org/ns/docbook" class="hl-attribute"> execution</span>:
<span xmlns:d="http://docbook.org/ns/docbook" class="hl-attribute"> isolation</span>:
<span xmlns:d="http://docbook.org/ns/docbook" class="hl-attribute"> strategy</span>: SEMAPHORE</pre></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="_creating_feign_clients_manually" href="#_creating_feign_clients_manually"></a>1.3&nbsp;Creating Feign Clients Manually</h2></div></div></div><p>In some cases it might be necessary to customize your Feign Clients in a way that is not
possible using the methods above. In this case you can create Clients using the
<a class="link" href="https://github.com/OpenFeign/feign/#basics" target="_top">Feign Builder API</a>. Below is an example
which creates two Feign Clients with the same interface but configures each one with
a separate request interceptor.</p><pre class="programlisting"><em><span class="hl-annotation" style="color: gray">@Import(FeignClientsConfiguration.class)</span></em>
<span xmlns:d="http://docbook.org/ns/docbook" class="hl-keyword">class</span> FooController {
<span xmlns:d="http://docbook.org/ns/docbook" class="hl-keyword">private</span> FooClient fooClient;
<span xmlns:d="http://docbook.org/ns/docbook" class="hl-keyword">private</span> FooClient adminClient;
<em><span class="hl-annotation" style="color: gray">@Autowired</span></em>
<span xmlns:d="http://docbook.org/ns/docbook" class="hl-keyword">public</span> FooController(Decoder decoder, Encoder encoder, Client client, Contract contract) {
<span xmlns:d="http://docbook.org/ns/docbook" class="hl-keyword">this</span>.fooClient = Feign.builder().client(client)
.encoder(encoder)
.decoder(decoder)
.contract(contract)
.requestInterceptor(<span xmlns:d="http://docbook.org/ns/docbook" class="hl-keyword">new</span> BasicAuthRequestInterceptor(<span xmlns:d="http://docbook.org/ns/docbook" class="hl-string">"user"</span>, <span xmlns:d="http://docbook.org/ns/docbook" class="hl-string">"user"</span>))
.target(FooClient.<span xmlns:d="http://docbook.org/ns/docbook" class="hl-keyword">class</span>, <span xmlns:d="http://docbook.org/ns/docbook" class="hl-string">"http://PROD-SVC"</span>);
<span xmlns:d="http://docbook.org/ns/docbook" class="hl-keyword">this</span>.adminClient = Feign.builder().client(client)
.encoder(encoder)
.decoder(decoder)
.contract(contract)
.requestInterceptor(<span xmlns:d="http://docbook.org/ns/docbook" class="hl-keyword">new</span> BasicAuthRequestInterceptor(<span xmlns:d="http://docbook.org/ns/docbook" class="hl-string">"admin"</span>, <span xmlns:d="http://docbook.org/ns/docbook" class="hl-string">"admin"</span>))
.target(FooClient.<span xmlns:d="http://docbook.org/ns/docbook" class="hl-keyword">class</span>, <span xmlns:d="http://docbook.org/ns/docbook" class="hl-string">"http://PROD-SVC"</span>);
}
}</pre><div class="note" style="margin-left: 0.5in; margin-right: 0.5in;"><table border="0" summary="Note"><tr><td rowspan="2" align="center" valign="top" width="25"><img alt="[Note]" src="images/note.png"></td><th align="left">Note</th></tr><tr><td align="left" valign="top"><p>In the above example <code class="literal">FeignClientsConfiguration.class</code> is the default configuration
provided by Spring Cloud Netflix.</p></td></tr></table></div><div class="note" style="margin-left: 0.5in; margin-right: 0.5in;"><table border="0" summary="Note"><tr><td rowspan="2" align="center" valign="top" width="25"><img alt="[Note]" src="images/note.png"></td><th align="left">Note</th></tr><tr><td align="left" valign="top"><p><code class="literal">PROD-SVC</code> is the name of the service the Clients will be making requests to.</p></td></tr></table></div><div class="note" style="margin-left: 0.5in; margin-right: 0.5in;"><table border="0" summary="Note"><tr><td rowspan="2" align="center" valign="top" width="25"><img alt="[Note]" src="images/note.png"></td><th align="left">Note</th></tr><tr><td align="left" valign="top"><p>The Feign <code class="literal">Contract</code> object defines what annotations and values are valid on interfaces. The
autowired <code class="literal">Contract</code> bean provides supports for SpringMVC annotations, instead of
the default Feign native annotations.</p></td></tr></table></div></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="spring-cloud-feign-hystrix" href="#spring-cloud-feign-hystrix"></a>1.4&nbsp;Feign Hystrix Support</h2></div></div></div><p>If Hystrix is on the classpath and <code class="literal">feign.hystrix.enabled=true</code>, Feign will wrap all methods with a circuit breaker. Returning a <code class="literal">com.netflix.hystrix.HystrixCommand</code> is also available. This lets you use reactive patterns (with a call to <code class="literal">.toObservable()</code> or <code class="literal">.observe()</code> or asynchronous use (with a call to <code class="literal">.queue()</code>).</p><p>To disable Hystrix support on a per-client basis create a vanilla <code class="literal">Feign.Builder</code> with the "prototype" scope, e.g.:</p><pre class="programlisting"><em><span class="hl-annotation" style="color: gray">@Configuration</span></em>
<span xmlns:d="http://docbook.org/ns/docbook" class="hl-keyword">public</span> <span xmlns:d="http://docbook.org/ns/docbook" class="hl-keyword">class</span> FooConfiguration {
<em><span class="hl-annotation" style="color: gray">@Bean</span></em>
<em><span class="hl-annotation" style="color: gray">@Scope("prototype")</span></em>
<span xmlns:d="http://docbook.org/ns/docbook" class="hl-keyword">public</span> Feign.Builder feignBuilder() {
<span xmlns:d="http://docbook.org/ns/docbook" class="hl-keyword">return</span> Feign.builder();
}
}</pre><div class="warning" style="margin-left: 0.5in; margin-right: 0.5in;"><table border="0" summary="Warning"><tr><td rowspan="2" align="center" valign="top" width="25"><img alt="[Warning]" src="images/warning.png"></td><th align="left">Warning</th></tr><tr><td align="left" valign="top"><p>Prior to the Spring Cloud Dalston release, if Hystrix was on the classpath Feign would have wrapped
all methods in a circuit breaker by default. This default behavior was changed in Spring Cloud Dalston in
favor for an opt-in approach.</p></td></tr></table></div></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="spring-cloud-feign-hystrix-fallback" href="#spring-cloud-feign-hystrix-fallback"></a>1.5&nbsp;Feign Hystrix Fallbacks</h2></div></div></div><p>Hystrix supports the notion of a fallback: a default code path that is executed when they circuit is open or there is an error. To enable fallbacks for a given <code class="literal">@FeignClient</code> set the <code class="literal">fallback</code> attribute to the class name that implements the fallback. You also need to declare your implementation as a Spring bean.</p><pre class="programlisting"><em><span class="hl-annotation" style="color: gray">@FeignClient(name = "hello", fallback = HystrixClientFallback.class)</span></em>
<span xmlns:d="http://docbook.org/ns/docbook" class="hl-keyword">protected</span> <span xmlns:d="http://docbook.org/ns/docbook" class="hl-keyword">interface</span> HystrixClient {
<em><span class="hl-annotation" style="color: gray">@RequestMapping(method = RequestMethod.GET, value = "/hello")</span></em>
Hello iFailSometimes();
}
<span xmlns:d="http://docbook.org/ns/docbook" class="hl-keyword">static</span> <span xmlns:d="http://docbook.org/ns/docbook" class="hl-keyword">class</span> HystrixClientFallback <span xmlns:d="http://docbook.org/ns/docbook" class="hl-keyword">implements</span> HystrixClient {
<em><span class="hl-annotation" style="color: gray">@Override</span></em>
<span xmlns:d="http://docbook.org/ns/docbook" class="hl-keyword">public</span> Hello iFailSometimes() {
<span xmlns:d="http://docbook.org/ns/docbook" class="hl-keyword">return</span> <span xmlns:d="http://docbook.org/ns/docbook" class="hl-keyword">new</span> Hello(<span xmlns:d="http://docbook.org/ns/docbook" class="hl-string">"fallback"</span>);
}
}</pre><p>If one needs access to the cause that made the fallback trigger, one can use the <code class="literal">fallbackFactory</code> attribute inside <code class="literal">@FeignClient</code>.</p><pre class="programlisting"><em><span class="hl-annotation" style="color: gray">@FeignClient(name = "hello", fallbackFactory = HystrixClientFallbackFactory.class)</span></em>
<span xmlns:d="http://docbook.org/ns/docbook" class="hl-keyword">protected</span> <span xmlns:d="http://docbook.org/ns/docbook" class="hl-keyword">interface</span> HystrixClient {
<em><span class="hl-annotation" style="color: gray">@RequestMapping(method = RequestMethod.GET, value = "/hello")</span></em>
Hello iFailSometimes();
}
<em><span class="hl-annotation" style="color: gray">@Component</span></em>
<span xmlns:d="http://docbook.org/ns/docbook" class="hl-keyword">static</span> <span xmlns:d="http://docbook.org/ns/docbook" class="hl-keyword">class</span> HystrixClientFallbackFactory <span xmlns:d="http://docbook.org/ns/docbook" class="hl-keyword">implements</span> FallbackFactory&lt;HystrixClient&gt; {
<em><span class="hl-annotation" style="color: gray">@Override</span></em>
<span xmlns:d="http://docbook.org/ns/docbook" class="hl-keyword">public</span> HystrixClient create(Throwable cause) {
<span xmlns:d="http://docbook.org/ns/docbook" class="hl-keyword">return</span> <span xmlns:d="http://docbook.org/ns/docbook" class="hl-keyword">new</span> HystrixClient() {
<em><span class="hl-annotation" style="color: gray">@Override</span></em>
<span xmlns:d="http://docbook.org/ns/docbook" class="hl-keyword">public</span> Hello iFailSometimes() {
<span xmlns:d="http://docbook.org/ns/docbook" class="hl-keyword">return</span> <span xmlns:d="http://docbook.org/ns/docbook" class="hl-keyword">new</span> Hello(<span xmlns:d="http://docbook.org/ns/docbook" class="hl-string">"fallback; reason was: "</span> + cause.getMessage());
}
};
}
}</pre><div class="warning" style="margin-left: 0.5in; margin-right: 0.5in;"><table border="0" summary="Warning"><tr><td rowspan="2" align="center" valign="top" width="25"><img alt="[Warning]" src="images/warning.png"></td><th align="left">Warning</th></tr><tr><td align="left" valign="top"><p>There is a limitation with the implementation of fallbacks in Feign and how Hystrix fallbacks work. Fallbacks are currently not supported for methods that return <code class="literal">com.netflix.hystrix.HystrixCommand</code> and <code class="literal">rx.Observable</code>.</p></td></tr></table></div></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="_feign_and_literal_primary_literal" href="#_feign_and_literal_primary_literal"></a>1.6&nbsp;Feign and <code class="literal">@Primary</code></h2></div></div></div><p>When using Feign with Hystrix fallbacks, there are multiple beans in the <code class="literal">ApplicationContext</code> of the same type. This will cause <code class="literal">@Autowired</code> to not work because there isn&#8217;t exactly one bean, or one marked as primary. To work around this, Spring Cloud Netflix marks all Feign instances as <code class="literal">@Primary</code>, so Spring Framework will know which bean to inject. In some cases, this may not be desirable. To turn off this behavior set the <code class="literal">primary</code> attribute of <code class="literal">@FeignClient</code> to false.</p><pre class="programlisting"><em><span class="hl-annotation" style="color: gray">@FeignClient(name = "hello", primary = false)</span></em>
<span xmlns:d="http://docbook.org/ns/docbook" class="hl-keyword">public</span> <span xmlns:d="http://docbook.org/ns/docbook" class="hl-keyword">interface</span> HelloClient {
<span xmlns:d="http://docbook.org/ns/docbook" class="hl-comment">// methods here</span>
}</pre></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="spring-cloud-feign-inheritance" href="#spring-cloud-feign-inheritance"></a>1.7&nbsp;Feign Inheritance Support</h2></div></div></div><p>Feign supports boilerplate apis via single-inheritance interfaces.
This allows grouping common operations into convenient base interfaces.</p><p><b>UserService.java.&nbsp;</b>
</p><pre class="programlisting"><span xmlns:d="http://docbook.org/ns/docbook" class="hl-keyword">public</span> <span xmlns:d="http://docbook.org/ns/docbook" class="hl-keyword">interface</span> UserService {
<em><span class="hl-annotation" style="color: gray">@RequestMapping(method = RequestMethod.GET, value ="/users/{id}")</span></em>
User getUser(<em><span class="hl-annotation" style="color: gray">@PathVariable("id")</span></em> <span xmlns:d="http://docbook.org/ns/docbook" class="hl-keyword">long</span> id);
}</pre><p>
</p><p><b>UserResource.java.&nbsp;</b>
</p><pre class="programlisting"><em><span class="hl-annotation" style="color: gray">@RestController</span></em>
<span xmlns:d="http://docbook.org/ns/docbook" class="hl-keyword">public</span> <span xmlns:d="http://docbook.org/ns/docbook" class="hl-keyword">class</span> UserResource <span xmlns:d="http://docbook.org/ns/docbook" class="hl-keyword">implements</span> UserService {
}</pre><p>
</p><p><b>UserClient.java.&nbsp;</b>
</p><pre class="programlisting"><span xmlns:d="http://docbook.org/ns/docbook" class="hl-keyword">package</span> project.user;
<em><span class="hl-annotation" style="color: gray">@FeignClient("users")</span></em>
<span xmlns:d="http://docbook.org/ns/docbook" class="hl-keyword">public</span> <span xmlns:d="http://docbook.org/ns/docbook" class="hl-keyword">interface</span> UserClient <span xmlns:d="http://docbook.org/ns/docbook" class="hl-keyword">extends</span> UserService {
}</pre><p>
</p><div class="note" style="margin-left: 0.5in; margin-right: 0.5in;"><table border="0" summary="Note"><tr><td rowspan="2" align="center" valign="top" width="25"><img alt="[Note]" src="images/note.png"></td><th align="left">Note</th></tr><tr><td align="left" valign="top"><p>It is generally not advisable to share an interface between a
server and a client. It introduces tight coupling, and also actually
doesn&#8217;t work with Spring MVC in its current form (method parameter
mapping is not inherited).</p></td></tr></table></div></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="_feign_request_response_compression" href="#_feign_request_response_compression"></a>1.8&nbsp;Feign request/response compression</h2></div></div></div><p>You may consider enabling the request or response GZIP compression for your
Feign requests. You can do this by enabling one of the properties:</p><pre class="programlisting">feign.compression.request.enabled=true
feign.compression.response.enabled=true</pre><p>Feign request compression gives you settings similar to what you may set for your web server:</p><pre class="programlisting">feign.compression.request.enabled=true
feign.compression.request.mime-types=text/xml,application/xml,application/json
feign.compression.request.min-request-size=<span class="hl-number">2048</span></pre><p>These properties allow you to be selective about the compressed media types and minimum request threshold length.</p></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="_feign_logging" href="#_feign_logging"></a>1.9&nbsp;Feign logging</h2></div></div></div><p>A logger is created for each Feign client created. By default the name of the logger is the full class name of the interface used to create the Feign client. Feign logging only responds to the <code class="literal">DEBUG</code> level.</p><p><b>application.yml.&nbsp;</b>
</p><pre class="programlisting"><span xmlns:d="http://docbook.org/ns/docbook" class="hl-attribute">logging.level.project.user.UserClient</span>: DEBUG</pre><p>
</p><p>The <code class="literal">Logger.Level</code> object that you may configure per client, tells Feign how much to log. Choices are:</p><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem"><code class="literal">NONE</code>, No logging (<span class="strong"><strong>DEFAULT</strong></span>).</li><li class="listitem"><code class="literal">BASIC</code>, Log only the request method and URL and the response status code and execution time.</li><li class="listitem"><code class="literal">HEADERS</code>, Log the basic information along with request and response headers.</li><li class="listitem"><code class="literal">FULL</code>, Log the headers, body, and metadata for both requests and responses.</li></ul></div><p>For example, the following would set the <code class="literal">Logger.Level</code> to <code class="literal">FULL</code>:</p><pre class="programlisting"><em><span class="hl-annotation" style="color: gray">@Configuration</span></em>
<span xmlns:d="http://docbook.org/ns/docbook" class="hl-keyword">public</span> <span xmlns:d="http://docbook.org/ns/docbook" class="hl-keyword">class</span> FooConfiguration {
<em><span class="hl-annotation" style="color: gray">@Bean</span></em>
Logger.Level feignLoggerLevel() {
<span xmlns:d="http://docbook.org/ns/docbook" class="hl-keyword">return</span> Logger.Level.FULL;
}
}</pre></div></div><div class="navfooter"><hr><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="multi_pr01.html">Prev</a>&nbsp;</td><td width="20%" align="center">&nbsp;</td><td width="40%" align="right">&nbsp;</td></tr><tr><td width="40%" align="left" valign="top">&nbsp;</td><td width="20%" align="center"><a accesskey="h" href="multi_spring-cloud-openfeign.html">Home</a></td><td width="40%" align="right" valign="top">&nbsp;</td></tr></table></div></body></html>
@@ -0,0 +1,3 @@
<html><head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Spring Cloud OpenFeign</title><link rel="stylesheet" type="text/css" href="css/manual-multipage.css"><meta name="generator" content="DocBook XSL Stylesheets V1.78.1"><link rel="home" href="multi_spring-cloud-openfeign.html" title="Spring Cloud OpenFeign"><link rel="next" href="multi_pr01.html" title=""></head><body class="firstpage" bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Spring Cloud OpenFeign</th></tr><tr><td width="20%" align="left">&nbsp;</td><th width="60%" align="center">&nbsp;</th><td width="20%" align="right">&nbsp;<a accesskey="n" href="multi_pr01.html">Next</a></td></tr></table><hr></div><div lang="en" class="book"><div class="titlepage"><div><div><h1 class="title"><a name="d0e3"></a>Spring Cloud OpenFeign</h1></div></div><hr></div><div class="toc"><p><b>Table of Contents</b></p><dl class="toc"><dt><span class="preface"><a href="multi_pr01.html"></a></span></dt><dt><span class="chapter"><a href="multi_spring-cloud-feign.html">1. Declarative REST Client: Feign</a></span></dt><dd><dl><dt><span class="section"><a href="multi_spring-cloud-feign.html#netflix-feign-starter">1.1. How to Include Feign</a></span></dt><dt><span class="section"><a href="multi_spring-cloud-feign.html#spring-cloud-feign-overriding-defaults">1.2. Overriding Feign Defaults</a></span></dt><dt><span class="section"><a href="multi_spring-cloud-feign.html#_creating_feign_clients_manually">1.3. Creating Feign Clients Manually</a></span></dt><dt><span class="section"><a href="multi_spring-cloud-feign.html#spring-cloud-feign-hystrix">1.4. Feign Hystrix Support</a></span></dt><dt><span class="section"><a href="multi_spring-cloud-feign.html#spring-cloud-feign-hystrix-fallback">1.5. Feign Hystrix Fallbacks</a></span></dt><dt><span class="section"><a href="multi_spring-cloud-feign.html#_feign_and_literal_primary_literal">1.6. Feign and <code class="literal">@Primary</code></a></span></dt><dt><span class="section"><a href="multi_spring-cloud-feign.html#spring-cloud-feign-inheritance">1.7. Feign Inheritance Support</a></span></dt><dt><span class="section"><a href="multi_spring-cloud-feign.html#_feign_request_response_compression">1.8. Feign request/response compression</a></span></dt><dt><span class="section"><a href="multi_spring-cloud-feign.html#_feign_logging">1.9. Feign logging</a></span></dt></dl></dd></dl></div></div><div class="navfooter"><hr><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left">&nbsp;</td><td width="20%" align="center">&nbsp;</td><td width="40%" align="right">&nbsp;<a accesskey="n" href="multi_pr01.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">&nbsp;</td><td width="20%" align="center">&nbsp;</td><td width="40%" align="right" valign="top">&nbsp;</td></tr></table></div></body></html>
+35
View File
@@ -0,0 +1,35 @@
/*
code highlight CSS resemblign the Eclipse IDE default color schema
@author Costin Leau
*/
.hl-keyword {
color: #7F0055;
font-weight: bold;
}
.hl-comment {
color: #3F5F5F;
font-style: italic;
}
.hl-multiline-comment {
color: #3F5FBF;
font-style: italic;
}
.hl-tag {
color: #3F7F7F;
}
.hl-attribute {
color: #7F007F;
}
.hl-value {
color: #2A00FF;
}
.hl-string {
color: #2A00FF;
}
+9
View File
@@ -0,0 +1,9 @@
@IMPORT url("manual.css");
body.firstpage {
background: url("../images/background.png") no-repeat center top;
}
div.part h1 {
border-top: none;
}
+6
View File
@@ -0,0 +1,6 @@
@IMPORT url("manual.css");
body {
background: url("../images/background.png") no-repeat center top;
}
+344
View File
@@ -0,0 +1,344 @@
@IMPORT url("highlight.css");
html {
padding: 0pt;
margin: 0pt;
}
body {
color: #333333;
margin: 15px 30px;
font-family: Helvetica, Arial, Freesans, Clean, Sans-serif;
line-height: 1.6;
-webkit-font-smoothing: antialiased;
}
code {
font-size: 16px;
font-family: Consolas, "Liberation Mono", Courier, monospace;
}
:not(a)>code {
color: #6D180B;
}
:not(pre)>code {
background-color: #F2F2F2;
border: 1px solid #CCCCCC;
border-radius: 4px;
padding: 1px 3px 0;
text-shadow: none;
white-space: nowrap;
}
body>*:first-child {
margin-top: 0 !important;
}
div {
margin: 0pt;
}
hr {
border: 1px solid #CCCCCC;
background: #CCCCCC;
}
h1,h2,h3,h4,h5,h6 {
color: #000000;
cursor: text;
font-weight: bold;
margin: 30px 0 10px;
padding: 0;
}
h1,h2,h3 {
margin: 40px 0 10px;
}
h1 {
margin: 70px 0 30px;
padding-top: 20px;
}
div.part h1 {
border-top: 1px dotted #CCCCCC;
}
h1,h1 code {
font-size: 32px;
}
h2,h2 code {
font-size: 24px;
}
h3,h3 code {
font-size: 20px;
}
h4,h1 code,h5,h5 code,h6,h6 code {
font-size: 18px;
}
div.book,div.chapter,div.appendix,div.part,div.preface {
min-width: 300px;
max-width: 1200px;
margin: 0 auto;
}
p.releaseinfo {
font-weight: bold;
margin-bottom: 40px;
margin-top: 40px;
}
div.authorgroup {
line-height: 1;
}
p.copyright {
line-height: 1;
margin-bottom: -5px;
}
.legalnotice p {
font-style: italic;
font-size: 14px;
line-height: 1;
}
div.titlepage+p,div.titlepage+p {
margin-top: 0;
}
pre {
line-height: 1.0;
color: black;
}
a {
color: #4183C4;
text-decoration: none;
}
p {
margin: 15px 0;
text-align: left;
}
ul,ol {
padding-left: 30px;
}
li p {
margin: 0;
}
div.table {
margin: 1em;
padding: 0.5em;
text-align: center;
}
div.table table,div.informaltable table {
display: table;
width: 100%;
}
div.table td {
padding-left: 7px;
padding-right: 7px;
}
.sidebar {
line-height: 1.4;
padding: 0 20px;
background-color: #F8F8F8;
border: 1px solid #CCCCCC;
border-radius: 3px 3px 3px 3px;
}
.sidebar p.title {
color: #6D180B;
}
pre.programlisting,pre.screen {
font-size: 15px;
padding: 6px 10px;
background-color: #F8F8F8;
border: 1px solid #CCCCCC;
border-radius: 3px 3px 3px 3px;
clear: both;
overflow: auto;
line-height: 1.4;
font-family: Consolas, "Liberation Mono", Courier, monospace;
}
table {
border-collapse: collapse;
border-spacing: 0;
border: 1px solid #DDDDDD !important;
border-radius: 4px !important;
border-collapse: separate !important;
line-height: 1.6;
}
table thead {
background: #F5F5F5;
}
table tr {
border: none;
border-bottom: none;
}
table th {
font-weight: bold;
}
table th,table td {
border: none !important;
padding: 6px 13px;
}
table tr:nth-child(2n) {
background-color: #F8F8F8;
}
td p {
margin: 0 0 15px 0;
}
div.table-contents td p {
margin: 0;
}
div.important *,div.note *,div.tip *,div.warning *,div.navheader *,div.navfooter *,div.calloutlist *
{
border: none !important;
background: none !important;
margin: 0;
}
div.important p,div.note p,div.tip p,div.warning p {
color: #6F6F6F;
line-height: 1.6;
}
div.important code,div.note code,div.tip code,div.warning code {
background-color: #F2F2F2 !important;
border: 1px solid #CCCCCC !important;
border-radius: 4px !important;
padding: 1px 3px 0 !important;
text-shadow: none !important;
white-space: nowrap !important;
}
.note th,.tip th,.warning th {
display: none;
}
.note tr:first-child td,.tip tr:first-child td,.warning tr:first-child td
{
border-right: 1px solid #CCCCCC !important;
padding-top: 10px;
}
div.calloutlist p,div.calloutlist td {
padding: 0;
margin: 0;
}
div.calloutlist>table>tbody>tr>td:first-child {
padding-left: 10px;
width: 30px !important;
}
div.important,div.note,div.tip,div.warning {
margin-left: 0px !important;
margin-right: 20px !important;
margin-top: 20px;
margin-bottom: 20px;
padding-top: 10px;
padding-bottom: 10px;
}
div.toc {
line-height: 1.2;
}
dl,dt {
margin-top: 1px;
margin-bottom: 0;
}
div.toc>dl>dt {
font-size: 32px;
font-weight: bold;
margin: 30px 0 10px 0;
display: block;
}
div.toc>dl>dd>dl>dt {
font-size: 24px;
font-weight: bold;
margin: 20px 0 10px 0;
display: block;
}
div.toc>dl>dd>dl>dd>dl>dt {
font-weight: bold;
font-size: 20px;
margin: 10px 0 0 0;
}
tbody.footnotes * {
border: none !important;
}
div.footnote p {
margin: 0;
line-height: 1;
}
div.footnote p sup {
margin-right: 6px;
vertical-align: middle;
}
div.navheader {
border-bottom: 1px solid #CCCCCC;
}
div.navfooter {
border-top: 1px solid #CCCCCC;
}
.title {
margin-left: -1em;
padding-left: 1em;
}
.title>a {
position: absolute;
visibility: hidden;
display: block;
font-size: 0.85em;
margin-top: 0.05em;
margin-left: -1em;
vertical-align: text-top;
color: black;
}
.title>a:before {
content: "\00A7";
}
.title:hover>a,.title>a:hover,.title:hover>a:hover {
visibility: visible;
}
.title:focus>a,.title>a:focus,.title:focus>a:focus {
outline: 0;
}
Binary file not shown.

After

Width:  |  Height:  |  Size: 18 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 329 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 353 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 350 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 931 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.1 KiB

+193
View File
@@ -0,0 +1,193 @@
<html><head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Spring Cloud OpenFeign</title><link rel="stylesheet" type="text/css" href="css/manual-singlepage.css"><meta name="generator" content="DocBook XSL Stylesheets V1.78.1"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div lang="en" class="book"><div class="titlepage"><div><div><h1 class="title"><a name="d0e3"></a>Spring Cloud OpenFeign</h1></div></div><hr></div><div class="toc"><p><b>Table of Contents</b></p><dl class="toc"><dt><span class="preface"><a href="#d0e9"></a></span></dt><dt><span class="chapter"><a href="#spring-cloud-feign">1. Declarative REST Client: Feign</a></span></dt><dd><dl><dt><span class="section"><a href="#netflix-feign-starter">1.1. How to Include Feign</a></span></dt><dt><span class="section"><a href="#spring-cloud-feign-overriding-defaults">1.2. Overriding Feign Defaults</a></span></dt><dt><span class="section"><a href="#_creating_feign_clients_manually">1.3. Creating Feign Clients Manually</a></span></dt><dt><span class="section"><a href="#spring-cloud-feign-hystrix">1.4. Feign Hystrix Support</a></span></dt><dt><span class="section"><a href="#spring-cloud-feign-hystrix-fallback">1.5. Feign Hystrix Fallbacks</a></span></dt><dt><span class="section"><a href="#_feign_and_literal_primary_literal">1.6. Feign and <code class="literal">@Primary</code></a></span></dt><dt><span class="section"><a href="#spring-cloud-feign-inheritance">1.7. Feign Inheritance Support</a></span></dt><dt><span class="section"><a href="#_feign_request_response_compression">1.8. Feign request/response compression</a></span></dt><dt><span class="section"><a href="#_feign_logging">1.9. Feign logging</a></span></dt></dl></dd></dl></div><div class="preface"><div class="titlepage"><div><div><h1 class="title"><a name="d0e9" href="#d0e9"></a></h1></div></div></div><p><span class="strong"><strong>2.0.5.BUILD-SNAPSHOT</strong></span></p><p>This project provides OpenFeign integrations for Spring Boot apps through autoconfiguration
and binding to the Spring Environment and other Spring programming model idioms.</p></div><div class="chapter"><div class="titlepage"><div><div><h1 class="title"><a name="spring-cloud-feign" href="#spring-cloud-feign"></a>1.&nbsp;Declarative REST Client: Feign</h1></div></div></div><p><a class="link" href="https://github.com/Netflix/feign" target="_top">Feign</a> is a declarative web service client. It makes writing web service clients easier. To use Feign create an interface and annotate it. It has pluggable annotation support including Feign annotations and JAX-RS annotations. Feign also supports pluggable encoders and decoders. Spring Cloud adds support for Spring MVC annotations and for using the same <code class="literal">HttpMessageConverters</code> used by default in Spring Web. Spring Cloud integrates Ribbon and Eureka to provide a load balanced http client when using Feign.</p><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="netflix-feign-starter" href="#netflix-feign-starter"></a>1.1&nbsp;How to Include Feign</h2></div></div></div><p>To include Feign in your project use the starter with group <code class="literal">org.springframework.cloud</code>
and artifact id <code class="literal">spring-cloud-starter-openfeign</code>. See the <a class="link" href="https://projects.spring.io/spring-cloud/" target="_top">Spring Cloud Project page</a>
for details on setting up your build system with the current Spring Cloud Release Train.</p><p>Example spring boot app</p><pre class="programlisting"><em><span class="hl-annotation" style="color: gray">@SpringBootApplication</span></em>
<em><span class="hl-annotation" style="color: gray">@EnableFeignClients</span></em>
<span xmlns:d="http://docbook.org/ns/docbook" class="hl-keyword">public</span> <span xmlns:d="http://docbook.org/ns/docbook" class="hl-keyword">class</span> Application {
<span xmlns:d="http://docbook.org/ns/docbook" class="hl-keyword">public</span> <span xmlns:d="http://docbook.org/ns/docbook" class="hl-keyword">static</span> <span xmlns:d="http://docbook.org/ns/docbook" class="hl-keyword">void</span> main(String[] args) {
SpringApplication.run(Application.<span xmlns:d="http://docbook.org/ns/docbook" class="hl-keyword">class</span>, args);
}
}</pre><p><b>StoreClient.java.&nbsp;</b>
</p><pre class="programlisting"><em><span class="hl-annotation" style="color: gray">@FeignClient("stores")</span></em>
<span xmlns:d="http://docbook.org/ns/docbook" class="hl-keyword">public</span> <span xmlns:d="http://docbook.org/ns/docbook" class="hl-keyword">interface</span> StoreClient {
<em><span class="hl-annotation" style="color: gray">@RequestMapping(method = RequestMethod.GET, value = "/stores")</span></em>
List&lt;Store&gt; getStores();
<em><span class="hl-annotation" style="color: gray">@RequestMapping(method = RequestMethod.POST, value = "/stores/{storeId}", consumes = "application/json")</span></em>
Store update(<em><span class="hl-annotation" style="color: gray">@PathVariable("storeId")</span></em> Long storeId, Store store);
}</pre><p>
</p><p>In the <code class="literal">@FeignClient</code> annotation the String value ("stores" above) is
an arbitrary client name, which is used to create a Ribbon load
balancer (see <a class="link" href="#">below for details of Ribbon
support</a>). You can also specify a URL using the <code class="literal">url</code> attribute
(absolute value or just a hostname). The name of the bean in the
application context is the fully qualified name of the interface.
To specify your own alias value you can use the <code class="literal">qualifier</code> value
of the <code class="literal">@FeignClient</code> annotation.</p><p>The Ribbon client above will want to discover the physical addresses
for the "stores" service. If your application is a Eureka client then
it will resolve the service in the Eureka service registry. If you
don&#8217;t want to use Eureka, you can simply configure a list of servers
in your external configuration (see
<a class="link" href="#">above for example</a>).</p></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="spring-cloud-feign-overriding-defaults" href="#spring-cloud-feign-overriding-defaults"></a>1.2&nbsp;Overriding Feign Defaults</h2></div></div></div><p>A central concept in Spring Cloud&#8217;s Feign support is that of the named client. Each feign client is part of an ensemble of components that work together to contact a remote server on demand, and the ensemble has a name that you give it as an application developer using the <code class="literal">@FeignClient</code> annotation. Spring Cloud creates a new ensemble as an
<code class="literal">ApplicationContext</code> on demand for each named client using <code class="literal">FeignClientsConfiguration</code>. This contains (amongst other things) an <code class="literal">feign.Decoder</code>, a <code class="literal">feign.Encoder</code>, and a <code class="literal">feign.Contract</code>.</p><p>Spring Cloud lets you take full control of the feign client by declaring additional configuration (on top of the <code class="literal">FeignClientsConfiguration</code>) using <code class="literal">@FeignClient</code>. Example:</p><pre class="programlisting"><em><span class="hl-annotation" style="color: gray">@FeignClient(name = "stores", configuration = FooConfiguration.class)</span></em>
<span xmlns:d="http://docbook.org/ns/docbook" class="hl-keyword">public</span> <span xmlns:d="http://docbook.org/ns/docbook" class="hl-keyword">interface</span> StoreClient {
<span xmlns:d="http://docbook.org/ns/docbook" class="hl-comment">//..</span>
}</pre><p>In this case the client is composed from the components already in <code class="literal">FeignClientsConfiguration</code> together with any in <code class="literal">FooConfiguration</code> (where the latter will override the former).</p><div class="note" style="margin-left: 0.5in; margin-right: 0.5in;"><table border="0" summary="Note"><tr><td rowspan="2" align="center" valign="top" width="25"><img alt="[Note]" src="images/note.png"></td><th align="left">Note</th></tr><tr><td align="left" valign="top"><p><code class="literal">FooConfiguration</code> does not need to be annotated with <code class="literal">@Configuration</code>. However, if it is, then take care to exclude it from any <code class="literal">@ComponentScan</code> that would otherwise include this configuration as it will become the default source for <code class="literal">feign.Decoder</code>, <code class="literal">feign.Encoder</code>, <code class="literal">feign.Contract</code>, etc., when specified. This can be avoided by putting it in a separate, non-overlapping package from any <code class="literal">@ComponentScan</code> or <code class="literal">@SpringBootApplication</code>, or it can be explicitly excluded in <code class="literal">@ComponentScan</code>.</p></td></tr></table></div><div class="note" style="margin-left: 0.5in; margin-right: 0.5in;"><table border="0" summary="Note"><tr><td rowspan="2" align="center" valign="top" width="25"><img alt="[Note]" src="images/note.png"></td><th align="left">Note</th></tr><tr><td align="left" valign="top"><p>The <code class="literal">serviceId</code> attribute is now deprecated in favor of the <code class="literal">name</code> attribute.</p></td></tr></table></div><div class="warning" style="margin-left: 0.5in; margin-right: 0.5in;"><table border="0" summary="Warning"><tr><td rowspan="2" align="center" valign="top" width="25"><img alt="[Warning]" src="images/warning.png"></td><th align="left">Warning</th></tr><tr><td align="left" valign="top"><p>Previously, using the <code class="literal">url</code> attribute, did not require the <code class="literal">name</code> attribute. Using <code class="literal">name</code> is now required.</p></td></tr></table></div><p>Placeholders are supported in the <code class="literal">name</code> and <code class="literal">url</code> attributes.</p><pre class="programlisting"><em><span class="hl-annotation" style="color: gray">@FeignClient(name = "${feign.name}", url = "${feign.url}")</span></em>
<span xmlns:d="http://docbook.org/ns/docbook" class="hl-keyword">public</span> <span xmlns:d="http://docbook.org/ns/docbook" class="hl-keyword">interface</span> StoreClient {
<span xmlns:d="http://docbook.org/ns/docbook" class="hl-comment">//..</span>
}</pre><p>Spring Cloud Netflix provides the following beans by default for feign (<code class="literal">BeanType</code> beanName: <code class="literal">ClassName</code>):</p><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem"><code class="literal">Decoder</code> feignDecoder: <code class="literal">ResponseEntityDecoder</code> (which wraps a <code class="literal">SpringDecoder</code>)</li><li class="listitem"><code class="literal">Encoder</code> feignEncoder: <code class="literal">SpringEncoder</code></li><li class="listitem"><code class="literal">Logger</code> feignLogger: <code class="literal">Slf4jLogger</code></li><li class="listitem"><code class="literal">Contract</code> feignContract: <code class="literal">SpringMvcContract</code></li><li class="listitem"><code class="literal">Feign.Builder</code> feignBuilder: <code class="literal">HystrixFeign.Builder</code></li><li class="listitem"><code class="literal">Client</code> feignClient: if Ribbon is enabled it is a <code class="literal">LoadBalancerFeignClient</code>, otherwise the default feign client is used.</li></ul></div><p>The OkHttpClient and ApacheHttpClient feign clients can be used by setting <code class="literal">feign.okhttp.enabled</code> or <code class="literal">feign.httpclient.enabled</code> to <code class="literal">true</code>, respectively, and having them on the classpath.
You can customize the HTTP client used by providing a bean of either <code class="literal">ClosableHttpClient</code> when using Apache or <code class="literal">OkHttpClient</code> when using OK HTTP.</p><p>Spring Cloud Netflix <span class="emphasis"><em>does not</em></span> provide the following beans by default for feign, but still looks up beans of these types from the application context to create the feign client:</p><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem"><code class="literal">Logger.Level</code></li><li class="listitem"><code class="literal">Retryer</code></li><li class="listitem"><code class="literal">ErrorDecoder</code></li><li class="listitem"><code class="literal">Request.Options</code></li><li class="listitem"><code class="literal">Collection&lt;RequestInterceptor&gt;</code></li><li class="listitem"><code class="literal">SetterFactory</code></li></ul></div><p>Creating a bean of one of those type and placing it in a <code class="literal">@FeignClient</code> configuration (such as <code class="literal">FooConfiguration</code> above) allows you to override each one of the beans described. Example:</p><pre class="programlisting"><em><span class="hl-annotation" style="color: gray">@Configuration</span></em>
<span xmlns:d="http://docbook.org/ns/docbook" class="hl-keyword">public</span> <span xmlns:d="http://docbook.org/ns/docbook" class="hl-keyword">class</span> FooConfiguration {
<em><span class="hl-annotation" style="color: gray">@Bean</span></em>
<span xmlns:d="http://docbook.org/ns/docbook" class="hl-keyword">public</span> Contract feignContract() {
<span xmlns:d="http://docbook.org/ns/docbook" class="hl-keyword">return</span> <span xmlns:d="http://docbook.org/ns/docbook" class="hl-keyword">new</span> feign.Contract.Default();
}
<em><span class="hl-annotation" style="color: gray">@Bean</span></em>
<span xmlns:d="http://docbook.org/ns/docbook" class="hl-keyword">public</span> BasicAuthRequestInterceptor basicAuthRequestInterceptor() {
<span xmlns:d="http://docbook.org/ns/docbook" class="hl-keyword">return</span> <span xmlns:d="http://docbook.org/ns/docbook" class="hl-keyword">new</span> BasicAuthRequestInterceptor(<span xmlns:d="http://docbook.org/ns/docbook" class="hl-string">"user"</span>, <span xmlns:d="http://docbook.org/ns/docbook" class="hl-string">"password"</span>);
}
}</pre><p>This replaces the <code class="literal">SpringMvcContract</code> with <code class="literal">feign.Contract.Default</code> and adds a <code class="literal">RequestInterceptor</code> to the collection of <code class="literal">RequestInterceptor</code>.</p><p><code class="literal">@FeignClient</code> also can be configured using configuration properties.</p><p>application.yml</p><pre class="programlisting"><span xmlns:d="http://docbook.org/ns/docbook" class="hl-attribute">feign</span>:
<span xmlns:d="http://docbook.org/ns/docbook" class="hl-attribute"> client</span>:
<span xmlns:d="http://docbook.org/ns/docbook" class="hl-attribute"> config</span>:
<span xmlns:d="http://docbook.org/ns/docbook" class="hl-attribute"> feignName</span>:
<span xmlns:d="http://docbook.org/ns/docbook" class="hl-attribute"> connectTimeout</span>: <span class="hl-number">5000</span>
<span xmlns:d="http://docbook.org/ns/docbook" class="hl-attribute"> readTimeout</span>: <span class="hl-number">5000</span>
<span xmlns:d="http://docbook.org/ns/docbook" class="hl-attribute"> loggerLevel</span>: full
<span xmlns:d="http://docbook.org/ns/docbook" class="hl-attribute"> errorDecoder</span>: com.example.SimpleErrorDecoder
<span xmlns:d="http://docbook.org/ns/docbook" class="hl-attribute"> retryer</span>: com.example.SimpleRetryer
<span xmlns:d="http://docbook.org/ns/docbook" class="hl-attribute"> requestInterceptors</span>:
- com.example.FooRequestInterceptor
- com.example.BarRequestInterceptor
<span xmlns:d="http://docbook.org/ns/docbook" class="hl-attribute"> decode404</span>: <span xmlns:d="http://docbook.org/ns/docbook" class="hl-keyword">false</span>
<span xmlns:d="http://docbook.org/ns/docbook" class="hl-attribute"> encoder</span>: com.example.SimpleEncoder
<span xmlns:d="http://docbook.org/ns/docbook" class="hl-attribute"> decoder</span>: com.example.SimpleDecoder
<span xmlns:d="http://docbook.org/ns/docbook" class="hl-attribute"> contract</span>: com.example.SimpleContract</pre><p>Default configurations can be specified in the <code class="literal">@EnableFeignClients</code> attribute <code class="literal">defaultConfiguration</code> in a similar manner as described above. The difference is that this configuration will apply to <span class="emphasis"><em>all</em></span> feign clients.</p><p>If you prefer using configuration properties to configured all <code class="literal">@FeignClient</code>, you can create configuration properties with <code class="literal">default</code> feign name.</p><p>application.yml</p><pre class="programlisting"><span xmlns:d="http://docbook.org/ns/docbook" class="hl-attribute">feign</span>:
<span xmlns:d="http://docbook.org/ns/docbook" class="hl-attribute"> client</span>:
<span xmlns:d="http://docbook.org/ns/docbook" class="hl-attribute"> config</span>:
<span xmlns:d="http://docbook.org/ns/docbook" class="hl-attribute"> default</span>:
<span xmlns:d="http://docbook.org/ns/docbook" class="hl-attribute"> connectTimeout</span>: <span class="hl-number">5000</span>
<span xmlns:d="http://docbook.org/ns/docbook" class="hl-attribute"> readTimeout</span>: <span class="hl-number">5000</span>
<span xmlns:d="http://docbook.org/ns/docbook" class="hl-attribute"> loggerLevel</span>: basic</pre><p>If we create both <code class="literal">@Configuration</code> bean and configuration properties, configuration properties will win.
It will override <code class="literal">@Configuration</code> values. But if you want to change the priority to <code class="literal">@Configuration</code>,
you can change <code class="literal">feign.client.default-to-properties</code> to <code class="literal">false</code>.</p><div class="note" style="margin-left: 0.5in; margin-right: 0.5in;"><table border="0" summary="Note"><tr><td rowspan="2" align="center" valign="top" width="25"><img alt="[Note]" src="images/note.png"></td><th align="left">Note</th></tr><tr><td align="left" valign="top"><p>If you need to use <code class="literal">ThreadLocal</code> bound variables in your <code class="literal">RequestInterceptor`s you will need to either set the
thread isolation strategy for Hystrix to `SEMAPHORE</code> or disable Hystrix in Feign.</p></td></tr></table></div><p>application.yml</p><pre class="programlisting"><span xmlns:d="http://docbook.org/ns/docbook" class="hl-comment"># To disable Hystrix in Feign</span>
<span xmlns:d="http://docbook.org/ns/docbook" class="hl-attribute">feign</span>:
<span xmlns:d="http://docbook.org/ns/docbook" class="hl-attribute"> hystrix</span>:
<span xmlns:d="http://docbook.org/ns/docbook" class="hl-attribute"> enabled</span>: <span xmlns:d="http://docbook.org/ns/docbook" class="hl-keyword">false</span>
<span xmlns:d="http://docbook.org/ns/docbook" class="hl-comment"># To set thread isolation to SEMAPHORE</span>
<span xmlns:d="http://docbook.org/ns/docbook" class="hl-attribute">hystrix</span>:
<span xmlns:d="http://docbook.org/ns/docbook" class="hl-attribute"> command</span>:
<span xmlns:d="http://docbook.org/ns/docbook" class="hl-attribute"> default</span>:
<span xmlns:d="http://docbook.org/ns/docbook" class="hl-attribute"> execution</span>:
<span xmlns:d="http://docbook.org/ns/docbook" class="hl-attribute"> isolation</span>:
<span xmlns:d="http://docbook.org/ns/docbook" class="hl-attribute"> strategy</span>: SEMAPHORE</pre></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="_creating_feign_clients_manually" href="#_creating_feign_clients_manually"></a>1.3&nbsp;Creating Feign Clients Manually</h2></div></div></div><p>In some cases it might be necessary to customize your Feign Clients in a way that is not
possible using the methods above. In this case you can create Clients using the
<a class="link" href="https://github.com/OpenFeign/feign/#basics" target="_top">Feign Builder API</a>. Below is an example
which creates two Feign Clients with the same interface but configures each one with
a separate request interceptor.</p><pre class="programlisting"><em><span class="hl-annotation" style="color: gray">@Import(FeignClientsConfiguration.class)</span></em>
<span xmlns:d="http://docbook.org/ns/docbook" class="hl-keyword">class</span> FooController {
<span xmlns:d="http://docbook.org/ns/docbook" class="hl-keyword">private</span> FooClient fooClient;
<span xmlns:d="http://docbook.org/ns/docbook" class="hl-keyword">private</span> FooClient adminClient;
<em><span class="hl-annotation" style="color: gray">@Autowired</span></em>
<span xmlns:d="http://docbook.org/ns/docbook" class="hl-keyword">public</span> FooController(Decoder decoder, Encoder encoder, Client client, Contract contract) {
<span xmlns:d="http://docbook.org/ns/docbook" class="hl-keyword">this</span>.fooClient = Feign.builder().client(client)
.encoder(encoder)
.decoder(decoder)
.contract(contract)
.requestInterceptor(<span xmlns:d="http://docbook.org/ns/docbook" class="hl-keyword">new</span> BasicAuthRequestInterceptor(<span xmlns:d="http://docbook.org/ns/docbook" class="hl-string">"user"</span>, <span xmlns:d="http://docbook.org/ns/docbook" class="hl-string">"user"</span>))
.target(FooClient.<span xmlns:d="http://docbook.org/ns/docbook" class="hl-keyword">class</span>, <span xmlns:d="http://docbook.org/ns/docbook" class="hl-string">"http://PROD-SVC"</span>);
<span xmlns:d="http://docbook.org/ns/docbook" class="hl-keyword">this</span>.adminClient = Feign.builder().client(client)
.encoder(encoder)
.decoder(decoder)
.contract(contract)
.requestInterceptor(<span xmlns:d="http://docbook.org/ns/docbook" class="hl-keyword">new</span> BasicAuthRequestInterceptor(<span xmlns:d="http://docbook.org/ns/docbook" class="hl-string">"admin"</span>, <span xmlns:d="http://docbook.org/ns/docbook" class="hl-string">"admin"</span>))
.target(FooClient.<span xmlns:d="http://docbook.org/ns/docbook" class="hl-keyword">class</span>, <span xmlns:d="http://docbook.org/ns/docbook" class="hl-string">"http://PROD-SVC"</span>);
}
}</pre><div class="note" style="margin-left: 0.5in; margin-right: 0.5in;"><table border="0" summary="Note"><tr><td rowspan="2" align="center" valign="top" width="25"><img alt="[Note]" src="images/note.png"></td><th align="left">Note</th></tr><tr><td align="left" valign="top"><p>In the above example <code class="literal">FeignClientsConfiguration.class</code> is the default configuration
provided by Spring Cloud Netflix.</p></td></tr></table></div><div class="note" style="margin-left: 0.5in; margin-right: 0.5in;"><table border="0" summary="Note"><tr><td rowspan="2" align="center" valign="top" width="25"><img alt="[Note]" src="images/note.png"></td><th align="left">Note</th></tr><tr><td align="left" valign="top"><p><code class="literal">PROD-SVC</code> is the name of the service the Clients will be making requests to.</p></td></tr></table></div><div class="note" style="margin-left: 0.5in; margin-right: 0.5in;"><table border="0" summary="Note"><tr><td rowspan="2" align="center" valign="top" width="25"><img alt="[Note]" src="images/note.png"></td><th align="left">Note</th></tr><tr><td align="left" valign="top"><p>The Feign <code class="literal">Contract</code> object defines what annotations and values are valid on interfaces. The
autowired <code class="literal">Contract</code> bean provides supports for SpringMVC annotations, instead of
the default Feign native annotations.</p></td></tr></table></div></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="spring-cloud-feign-hystrix" href="#spring-cloud-feign-hystrix"></a>1.4&nbsp;Feign Hystrix Support</h2></div></div></div><p>If Hystrix is on the classpath and <code class="literal">feign.hystrix.enabled=true</code>, Feign will wrap all methods with a circuit breaker. Returning a <code class="literal">com.netflix.hystrix.HystrixCommand</code> is also available. This lets you use reactive patterns (with a call to <code class="literal">.toObservable()</code> or <code class="literal">.observe()</code> or asynchronous use (with a call to <code class="literal">.queue()</code>).</p><p>To disable Hystrix support on a per-client basis create a vanilla <code class="literal">Feign.Builder</code> with the "prototype" scope, e.g.:</p><pre class="programlisting"><em><span class="hl-annotation" style="color: gray">@Configuration</span></em>
<span xmlns:d="http://docbook.org/ns/docbook" class="hl-keyword">public</span> <span xmlns:d="http://docbook.org/ns/docbook" class="hl-keyword">class</span> FooConfiguration {
<em><span class="hl-annotation" style="color: gray">@Bean</span></em>
<em><span class="hl-annotation" style="color: gray">@Scope("prototype")</span></em>
<span xmlns:d="http://docbook.org/ns/docbook" class="hl-keyword">public</span> Feign.Builder feignBuilder() {
<span xmlns:d="http://docbook.org/ns/docbook" class="hl-keyword">return</span> Feign.builder();
}
}</pre><div class="warning" style="margin-left: 0.5in; margin-right: 0.5in;"><table border="0" summary="Warning"><tr><td rowspan="2" align="center" valign="top" width="25"><img alt="[Warning]" src="images/warning.png"></td><th align="left">Warning</th></tr><tr><td align="left" valign="top"><p>Prior to the Spring Cloud Dalston release, if Hystrix was on the classpath Feign would have wrapped
all methods in a circuit breaker by default. This default behavior was changed in Spring Cloud Dalston in
favor for an opt-in approach.</p></td></tr></table></div></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="spring-cloud-feign-hystrix-fallback" href="#spring-cloud-feign-hystrix-fallback"></a>1.5&nbsp;Feign Hystrix Fallbacks</h2></div></div></div><p>Hystrix supports the notion of a fallback: a default code path that is executed when they circuit is open or there is an error. To enable fallbacks for a given <code class="literal">@FeignClient</code> set the <code class="literal">fallback</code> attribute to the class name that implements the fallback. You also need to declare your implementation as a Spring bean.</p><pre class="programlisting"><em><span class="hl-annotation" style="color: gray">@FeignClient(name = "hello", fallback = HystrixClientFallback.class)</span></em>
<span xmlns:d="http://docbook.org/ns/docbook" class="hl-keyword">protected</span> <span xmlns:d="http://docbook.org/ns/docbook" class="hl-keyword">interface</span> HystrixClient {
<em><span class="hl-annotation" style="color: gray">@RequestMapping(method = RequestMethod.GET, value = "/hello")</span></em>
Hello iFailSometimes();
}
<span xmlns:d="http://docbook.org/ns/docbook" class="hl-keyword">static</span> <span xmlns:d="http://docbook.org/ns/docbook" class="hl-keyword">class</span> HystrixClientFallback <span xmlns:d="http://docbook.org/ns/docbook" class="hl-keyword">implements</span> HystrixClient {
<em><span class="hl-annotation" style="color: gray">@Override</span></em>
<span xmlns:d="http://docbook.org/ns/docbook" class="hl-keyword">public</span> Hello iFailSometimes() {
<span xmlns:d="http://docbook.org/ns/docbook" class="hl-keyword">return</span> <span xmlns:d="http://docbook.org/ns/docbook" class="hl-keyword">new</span> Hello(<span xmlns:d="http://docbook.org/ns/docbook" class="hl-string">"fallback"</span>);
}
}</pre><p>If one needs access to the cause that made the fallback trigger, one can use the <code class="literal">fallbackFactory</code> attribute inside <code class="literal">@FeignClient</code>.</p><pre class="programlisting"><em><span class="hl-annotation" style="color: gray">@FeignClient(name = "hello", fallbackFactory = HystrixClientFallbackFactory.class)</span></em>
<span xmlns:d="http://docbook.org/ns/docbook" class="hl-keyword">protected</span> <span xmlns:d="http://docbook.org/ns/docbook" class="hl-keyword">interface</span> HystrixClient {
<em><span class="hl-annotation" style="color: gray">@RequestMapping(method = RequestMethod.GET, value = "/hello")</span></em>
Hello iFailSometimes();
}
<em><span class="hl-annotation" style="color: gray">@Component</span></em>
<span xmlns:d="http://docbook.org/ns/docbook" class="hl-keyword">static</span> <span xmlns:d="http://docbook.org/ns/docbook" class="hl-keyword">class</span> HystrixClientFallbackFactory <span xmlns:d="http://docbook.org/ns/docbook" class="hl-keyword">implements</span> FallbackFactory&lt;HystrixClient&gt; {
<em><span class="hl-annotation" style="color: gray">@Override</span></em>
<span xmlns:d="http://docbook.org/ns/docbook" class="hl-keyword">public</span> HystrixClient create(Throwable cause) {
<span xmlns:d="http://docbook.org/ns/docbook" class="hl-keyword">return</span> <span xmlns:d="http://docbook.org/ns/docbook" class="hl-keyword">new</span> HystrixClient() {
<em><span class="hl-annotation" style="color: gray">@Override</span></em>
<span xmlns:d="http://docbook.org/ns/docbook" class="hl-keyword">public</span> Hello iFailSometimes() {
<span xmlns:d="http://docbook.org/ns/docbook" class="hl-keyword">return</span> <span xmlns:d="http://docbook.org/ns/docbook" class="hl-keyword">new</span> Hello(<span xmlns:d="http://docbook.org/ns/docbook" class="hl-string">"fallback; reason was: "</span> + cause.getMessage());
}
};
}
}</pre><div class="warning" style="margin-left: 0.5in; margin-right: 0.5in;"><table border="0" summary="Warning"><tr><td rowspan="2" align="center" valign="top" width="25"><img alt="[Warning]" src="images/warning.png"></td><th align="left">Warning</th></tr><tr><td align="left" valign="top"><p>There is a limitation with the implementation of fallbacks in Feign and how Hystrix fallbacks work. Fallbacks are currently not supported for methods that return <code class="literal">com.netflix.hystrix.HystrixCommand</code> and <code class="literal">rx.Observable</code>.</p></td></tr></table></div></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="_feign_and_literal_primary_literal" href="#_feign_and_literal_primary_literal"></a>1.6&nbsp;Feign and <code class="literal">@Primary</code></h2></div></div></div><p>When using Feign with Hystrix fallbacks, there are multiple beans in the <code class="literal">ApplicationContext</code> of the same type. This will cause <code class="literal">@Autowired</code> to not work because there isn&#8217;t exactly one bean, or one marked as primary. To work around this, Spring Cloud Netflix marks all Feign instances as <code class="literal">@Primary</code>, so Spring Framework will know which bean to inject. In some cases, this may not be desirable. To turn off this behavior set the <code class="literal">primary</code> attribute of <code class="literal">@FeignClient</code> to false.</p><pre class="programlisting"><em><span class="hl-annotation" style="color: gray">@FeignClient(name = "hello", primary = false)</span></em>
<span xmlns:d="http://docbook.org/ns/docbook" class="hl-keyword">public</span> <span xmlns:d="http://docbook.org/ns/docbook" class="hl-keyword">interface</span> HelloClient {
<span xmlns:d="http://docbook.org/ns/docbook" class="hl-comment">// methods here</span>
}</pre></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="spring-cloud-feign-inheritance" href="#spring-cloud-feign-inheritance"></a>1.7&nbsp;Feign Inheritance Support</h2></div></div></div><p>Feign supports boilerplate apis via single-inheritance interfaces.
This allows grouping common operations into convenient base interfaces.</p><p><b>UserService.java.&nbsp;</b>
</p><pre class="programlisting"><span xmlns:d="http://docbook.org/ns/docbook" class="hl-keyword">public</span> <span xmlns:d="http://docbook.org/ns/docbook" class="hl-keyword">interface</span> UserService {
<em><span class="hl-annotation" style="color: gray">@RequestMapping(method = RequestMethod.GET, value ="/users/{id}")</span></em>
User getUser(<em><span class="hl-annotation" style="color: gray">@PathVariable("id")</span></em> <span xmlns:d="http://docbook.org/ns/docbook" class="hl-keyword">long</span> id);
}</pre><p>
</p><p><b>UserResource.java.&nbsp;</b>
</p><pre class="programlisting"><em><span class="hl-annotation" style="color: gray">@RestController</span></em>
<span xmlns:d="http://docbook.org/ns/docbook" class="hl-keyword">public</span> <span xmlns:d="http://docbook.org/ns/docbook" class="hl-keyword">class</span> UserResource <span xmlns:d="http://docbook.org/ns/docbook" class="hl-keyword">implements</span> UserService {
}</pre><p>
</p><p><b>UserClient.java.&nbsp;</b>
</p><pre class="programlisting"><span xmlns:d="http://docbook.org/ns/docbook" class="hl-keyword">package</span> project.user;
<em><span class="hl-annotation" style="color: gray">@FeignClient("users")</span></em>
<span xmlns:d="http://docbook.org/ns/docbook" class="hl-keyword">public</span> <span xmlns:d="http://docbook.org/ns/docbook" class="hl-keyword">interface</span> UserClient <span xmlns:d="http://docbook.org/ns/docbook" class="hl-keyword">extends</span> UserService {
}</pre><p>
</p><div class="note" style="margin-left: 0.5in; margin-right: 0.5in;"><table border="0" summary="Note"><tr><td rowspan="2" align="center" valign="top" width="25"><img alt="[Note]" src="images/note.png"></td><th align="left">Note</th></tr><tr><td align="left" valign="top"><p>It is generally not advisable to share an interface between a
server and a client. It introduces tight coupling, and also actually
doesn&#8217;t work with Spring MVC in its current form (method parameter
mapping is not inherited).</p></td></tr></table></div></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="_feign_request_response_compression" href="#_feign_request_response_compression"></a>1.8&nbsp;Feign request/response compression</h2></div></div></div><p>You may consider enabling the request or response GZIP compression for your
Feign requests. You can do this by enabling one of the properties:</p><pre class="programlisting">feign.compression.request.enabled=true
feign.compression.response.enabled=true</pre><p>Feign request compression gives you settings similar to what you may set for your web server:</p><pre class="programlisting">feign.compression.request.enabled=true
feign.compression.request.mime-types=text/xml,application/xml,application/json
feign.compression.request.min-request-size=<span class="hl-number">2048</span></pre><p>These properties allow you to be selective about the compressed media types and minimum request threshold length.</p></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="_feign_logging" href="#_feign_logging"></a>1.9&nbsp;Feign logging</h2></div></div></div><p>A logger is created for each Feign client created. By default the name of the logger is the full class name of the interface used to create the Feign client. Feign logging only responds to the <code class="literal">DEBUG</code> level.</p><p><b>application.yml.&nbsp;</b>
</p><pre class="programlisting"><span xmlns:d="http://docbook.org/ns/docbook" class="hl-attribute">logging.level.project.user.UserClient</span>: DEBUG</pre><p>
</p><p>The <code class="literal">Logger.Level</code> object that you may configure per client, tells Feign how much to log. Choices are:</p><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem"><code class="literal">NONE</code>, No logging (<span class="strong"><strong>DEFAULT</strong></span>).</li><li class="listitem"><code class="literal">BASIC</code>, Log only the request method and URL and the response status code and execution time.</li><li class="listitem"><code class="literal">HEADERS</code>, Log the basic information along with request and response headers.</li><li class="listitem"><code class="literal">FULL</code>, Log the headers, body, and metadata for both requests and responses.</li></ul></div><p>For example, the following would set the <code class="literal">Logger.Level</code> to <code class="literal">FULL</code>:</p><pre class="programlisting"><em><span class="hl-annotation" style="color: gray">@Configuration</span></em>
<span xmlns:d="http://docbook.org/ns/docbook" class="hl-keyword">public</span> <span xmlns:d="http://docbook.org/ns/docbook" class="hl-keyword">class</span> FooConfiguration {
<em><span class="hl-annotation" style="color: gray">@Bean</span></em>
Logger.Level feignLoggerLevel() {
<span xmlns:d="http://docbook.org/ns/docbook" class="hl-keyword">return</span> Logger.Level.FULL;
}
}</pre></div></div></div></body></html>
+117
View File
@@ -0,0 +1,117 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<!--[if IE]><meta http-equiv="X-UA-Compatible" content="IE=edge"><![endif]-->
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta name="generator" content="Asciidoctor 1.5.5">
<title>spring-cloud-openfeign</title>
<link rel="stylesheet" href="css/manual-singlepage.css">
<style>
.hidden {
display: none;
}
.switch {
border-width: 1px 1px 0 1px;
border-style: solid;
border-color: #7a2518;
display: inline-block;
}
.switch--item {
padding: 10px;
background-color: #ffffff;
color: #7a2518;
display: inline-block;
cursor: pointer;
}
.switch--item.selected {
background-color: #7a2519;
color: #ffffff;
}
</style>
<script src="http://cdnjs.cloudflare.com/ajax/libs/zepto/1.2.0/zepto.min.js"></script>
<script type="text/javascript">
function addBlockSwitches() {
$('.primary').each(function() {
primary = $(this);
createSwitchItem(primary, createBlockSwitch(primary)).item.addClass("selected");
primary.children('.title').remove();
});
$('.secondary').each(function(idx, node) {
secondary = $(node);
primary = findPrimary(secondary);
switchItem = createSwitchItem(secondary, primary.children('.switch'));
switchItem.content.addClass('hidden');
findPrimary(secondary).append(switchItem.content);
secondary.remove();
});
}
function createBlockSwitch(primary) {
blockSwitch = $('<div class="switch"></div>');
primary.prepend(blockSwitch);
return blockSwitch;
}
function findPrimary(secondary) {
candidate = secondary.prev();
while (!candidate.is('.primary')) {
candidate = candidate.prev();
}
return candidate;
}
function createSwitchItem(block, blockSwitch) {
blockName = block.children('.title').text();
content = block.children('.content').first().append(block.next('.colist'));
item = $('<div class="switch--item">' + blockName + '</div>');
item.on('click', '', content, function(e) {
$(this).addClass('selected');
$(this).siblings().removeClass('selected');
e.data.siblings('.content').addClass('hidden');
e.data.removeClass('hidden');
});
blockSwitch.append(item);
return {'item': item, 'content': content};
}
$(addBlockSwitches);
</script>
</head>
<body class="article">
<div id="header">
<h1>spring-cloud-openfeign</h1>
</div>
<div id="content">
<div id="preamble">
<div class="sectionbody">
<div class="paragraph">
<p>2.0.5.BUILD-SNAPSHOT</p>
</div>
</div>
</div>
<div class="sect1">
<h2 id="_pick_the_documentation_option">Pick The Documentation Option</h2>
<div class="sectionbody">
<div class="ulist">
<ul>
<li>
<p><a href="single/spring-cloud-openfeign.html">Single HTML</a></p>
</li>
<li>
<p><a href="multi/multi_spring-cloud-openfeign.html">Multi HTML</a></p>
</li>
</ul>
</div>
</div>
</div>
</div>
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/prettify/r298/prettify.min.css">
<script src="https://cdnjs.cloudflare.com/ajax/libs/prettify/r298/prettify.min.js"></script>
<script>prettyPrint()</script>
</body>
</html>
+387
View File
@@ -0,0 +1,387 @@
<?xml version="1.0" encoding="UTF-8"?>
<?asciidoc-toc?>
<?asciidoc-numbered?>
<book xmlns="http://docbook.org/ns/docbook" xmlns:xl="http://www.w3.org/1999/xlink" version="5.0" xml:lang="en">
<info>
<title>Spring Cloud OpenFeign</title>
<date>2019-09-16</date>
</info>
<preface>
<title></title>
<simpara><emphasis role="strong">2.0.5.BUILD-SNAPSHOT</emphasis></simpara>
<simpara>This project provides OpenFeign integrations for Spring Boot apps through autoconfiguration
and binding to the Spring Environment and other Spring programming model idioms.</simpara>
</preface>
<chapter xml:id="spring-cloud-feign">
<title>Declarative REST Client: Feign</title>
<simpara><link xl:href="https://github.com/Netflix/feign">Feign</link> is a declarative web service client. It makes writing web service clients easier. To use Feign create an interface and annotate it. It has pluggable annotation support including Feign annotations and JAX-RS annotations. Feign also supports pluggable encoders and decoders. Spring Cloud adds support for Spring MVC annotations and for using the same <literal>HttpMessageConverters</literal> used by default in Spring Web. Spring Cloud integrates Ribbon and Eureka to provide a load balanced http client when using Feign.</simpara>
<section xml:id="netflix-feign-starter">
<title>How to Include Feign</title>
<simpara>To include Feign in your project use the starter with group <literal>org.springframework.cloud</literal>
and artifact id <literal>spring-cloud-starter-openfeign</literal>. See the <link xl:href="https://projects.spring.io/spring-cloud/">Spring Cloud Project page</link>
for details on setting up your build system with the current Spring Cloud Release Train.</simpara>
<simpara>Example spring boot app</simpara>
<programlisting language="java" linenumbering="unnumbered">@SpringBootApplication
@EnableFeignClients
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
}</programlisting>
<formalpara>
<title>StoreClient.java</title>
<para>
<programlisting language="java" linenumbering="unnumbered">@FeignClient("stores")
public interface StoreClient {
@RequestMapping(method = RequestMethod.GET, value = "/stores")
List&lt;Store&gt; getStores();
@RequestMapping(method = RequestMethod.POST, value = "/stores/{storeId}", consumes = "application/json")
Store update(@PathVariable("storeId") Long storeId, Store store);
}</programlisting>
</para>
</formalpara>
<simpara>In the <literal>@FeignClient</literal> annotation the String value ("stores" above) is
an arbitrary client name, which is used to create a Ribbon load
balancer (see <link linkend="spring-cloud-ribbon">below for details of Ribbon
support</link>). You can also specify a URL using the <literal>url</literal> attribute
(absolute value or just a hostname). The name of the bean in the
application context is the fully qualified name of the interface.
To specify your own alias value you can use the <literal>qualifier</literal> value
of the <literal>@FeignClient</literal> annotation.</simpara>
<simpara>The Ribbon client above will want to discover the physical addresses
for the "stores" service. If your application is a Eureka client then
it will resolve the service in the Eureka service registry. If you
don&#8217;t want to use Eureka, you can simply configure a list of servers
in your external configuration (see
<link linkend="spring-cloud-ribbon-without-eureka">above for example</link>).</simpara>
</section>
<section xml:id="spring-cloud-feign-overriding-defaults">
<title>Overriding Feign Defaults</title>
<simpara>A central concept in Spring Cloud&#8217;s Feign support is that of the named client. Each feign client is part of an ensemble of components that work together to contact a remote server on demand, and the ensemble has a name that you give it as an application developer using the <literal>@FeignClient</literal> annotation. Spring Cloud creates a new ensemble as an
<literal>ApplicationContext</literal> on demand for each named client using <literal>FeignClientsConfiguration</literal>. This contains (amongst other things) an <literal>feign.Decoder</literal>, a <literal>feign.Encoder</literal>, and a <literal>feign.Contract</literal>.</simpara>
<simpara>Spring Cloud lets you take full control of the feign client by declaring additional configuration (on top of the <literal>FeignClientsConfiguration</literal>) using <literal>@FeignClient</literal>. Example:</simpara>
<programlisting language="java" linenumbering="unnumbered">@FeignClient(name = "stores", configuration = FooConfiguration.class)
public interface StoreClient {
//..
}</programlisting>
<simpara>In this case the client is composed from the components already in <literal>FeignClientsConfiguration</literal> together with any in <literal>FooConfiguration</literal> (where the latter will override the former).</simpara>
<note>
<simpara><literal>FooConfiguration</literal> does not need to be annotated with <literal>@Configuration</literal>. However, if it is, then take care to exclude it from any <literal>@ComponentScan</literal> that would otherwise include this configuration as it will become the default source for <literal>feign.Decoder</literal>, <literal>feign.Encoder</literal>, <literal>feign.Contract</literal>, etc., when specified. This can be avoided by putting it in a separate, non-overlapping package from any <literal>@ComponentScan</literal> or <literal>@SpringBootApplication</literal>, or it can be explicitly excluded in <literal>@ComponentScan</literal>.</simpara>
</note>
<note>
<simpara>The <literal>serviceId</literal> attribute is now deprecated in favor of the <literal>name</literal> attribute.</simpara>
</note>
<warning>
<simpara>Previously, using the <literal>url</literal> attribute, did not require the <literal>name</literal> attribute. Using <literal>name</literal> is now required.</simpara>
</warning>
<simpara>Placeholders are supported in the <literal>name</literal> and <literal>url</literal> attributes.</simpara>
<programlisting language="java" linenumbering="unnumbered">@FeignClient(name = "${feign.name}", url = "${feign.url}")
public interface StoreClient {
//..
}</programlisting>
<simpara>Spring Cloud Netflix provides the following beans by default for feign (<literal>BeanType</literal> beanName: <literal>ClassName</literal>):</simpara>
<itemizedlist>
<listitem>
<simpara><literal>Decoder</literal> feignDecoder: <literal>ResponseEntityDecoder</literal> (which wraps a <literal>SpringDecoder</literal>)</simpara>
</listitem>
<listitem>
<simpara><literal>Encoder</literal> feignEncoder: <literal>SpringEncoder</literal></simpara>
</listitem>
<listitem>
<simpara><literal>Logger</literal> feignLogger: <literal>Slf4jLogger</literal></simpara>
</listitem>
<listitem>
<simpara><literal>Contract</literal> feignContract: <literal>SpringMvcContract</literal></simpara>
</listitem>
<listitem>
<simpara><literal>Feign.Builder</literal> feignBuilder: <literal>HystrixFeign.Builder</literal></simpara>
</listitem>
<listitem>
<simpara><literal>Client</literal> feignClient: if Ribbon is enabled it is a <literal>LoadBalancerFeignClient</literal>, otherwise the default feign client is used.</simpara>
</listitem>
</itemizedlist>
<simpara>The OkHttpClient and ApacheHttpClient feign clients can be used by setting <literal>feign.okhttp.enabled</literal> or <literal>feign.httpclient.enabled</literal> to <literal>true</literal>, respectively, and having them on the classpath.
You can customize the HTTP client used by providing a bean of either <literal>ClosableHttpClient</literal> when using Apache or <literal>OkHttpClient</literal> when using OK HTTP.</simpara>
<simpara>Spring Cloud Netflix <emphasis>does not</emphasis> provide the following beans by default for feign, but still looks up beans of these types from the application context to create the feign client:</simpara>
<itemizedlist>
<listitem>
<simpara><literal>Logger.Level</literal></simpara>
</listitem>
<listitem>
<simpara><literal>Retryer</literal></simpara>
</listitem>
<listitem>
<simpara><literal>ErrorDecoder</literal></simpara>
</listitem>
<listitem>
<simpara><literal>Request.Options</literal></simpara>
</listitem>
<listitem>
<simpara><literal>Collection&lt;RequestInterceptor&gt;</literal></simpara>
</listitem>
<listitem>
<simpara><literal>SetterFactory</literal></simpara>
</listitem>
</itemizedlist>
<simpara>Creating a bean of one of those type and placing it in a <literal>@FeignClient</literal> configuration (such as <literal>FooConfiguration</literal> above) allows you to override each one of the beans described. Example:</simpara>
<programlisting language="java" linenumbering="unnumbered">@Configuration
public class FooConfiguration {
@Bean
public Contract feignContract() {
return new feign.Contract.Default();
}
@Bean
public BasicAuthRequestInterceptor basicAuthRequestInterceptor() {
return new BasicAuthRequestInterceptor("user", "password");
}
}</programlisting>
<simpara>This replaces the <literal>SpringMvcContract</literal> with <literal>feign.Contract.Default</literal> and adds a <literal>RequestInterceptor</literal> to the collection of <literal>RequestInterceptor</literal>.</simpara>
<simpara><literal>@FeignClient</literal> also can be configured using configuration properties.</simpara>
<simpara>application.yml</simpara>
<programlisting language="yaml" linenumbering="unnumbered">feign:
client:
config:
feignName:
connectTimeout: 5000
readTimeout: 5000
loggerLevel: full
errorDecoder: com.example.SimpleErrorDecoder
retryer: com.example.SimpleRetryer
requestInterceptors:
- com.example.FooRequestInterceptor
- com.example.BarRequestInterceptor
decode404: false
encoder: com.example.SimpleEncoder
decoder: com.example.SimpleDecoder
contract: com.example.SimpleContract</programlisting>
<simpara>Default configurations can be specified in the <literal>@EnableFeignClients</literal> attribute <literal>defaultConfiguration</literal> in a similar manner as described above. The difference is that this configuration will apply to <emphasis>all</emphasis> feign clients.</simpara>
<simpara>If you prefer using configuration properties to configured all <literal>@FeignClient</literal>, you can create configuration properties with <literal>default</literal> feign name.</simpara>
<simpara>application.yml</simpara>
<programlisting language="yaml" linenumbering="unnumbered">feign:
client:
config:
default:
connectTimeout: 5000
readTimeout: 5000
loggerLevel: basic</programlisting>
<simpara>If we create both <literal>@Configuration</literal> bean and configuration properties, configuration properties will win.
It will override <literal>@Configuration</literal> values. But if you want to change the priority to <literal>@Configuration</literal>,
you can change <literal>feign.client.default-to-properties</literal> to <literal>false</literal>.</simpara>
<note>
<simpara>If you need to use <literal>ThreadLocal</literal> bound variables in your <literal>RequestInterceptor`s you will need to either set the
thread isolation strategy for Hystrix to `SEMAPHORE</literal> or disable Hystrix in Feign.</simpara>
</note>
<simpara>application.yml</simpara>
<programlisting language="yaml" linenumbering="unnumbered"># To disable Hystrix in Feign
feign:
hystrix:
enabled: false
# To set thread isolation to SEMAPHORE
hystrix:
command:
default:
execution:
isolation:
strategy: SEMAPHORE</programlisting>
</section>
<section xml:id="_creating_feign_clients_manually">
<title>Creating Feign Clients Manually</title>
<simpara>In some cases it might be necessary to customize your Feign Clients in a way that is not
possible using the methods above. In this case you can create Clients using the
<link xl:href="https://github.com/OpenFeign/feign/#basics">Feign Builder API</link>. Below is an example
which creates two Feign Clients with the same interface but configures each one with
a separate request interceptor.</simpara>
<programlisting language="java" linenumbering="unnumbered">@Import(FeignClientsConfiguration.class)
class FooController {
private FooClient fooClient;
private FooClient adminClient;
@Autowired
public FooController(Decoder decoder, Encoder encoder, Client client, Contract contract) {
this.fooClient = Feign.builder().client(client)
.encoder(encoder)
.decoder(decoder)
.contract(contract)
.requestInterceptor(new BasicAuthRequestInterceptor("user", "user"))
.target(FooClient.class, "http://PROD-SVC");
this.adminClient = Feign.builder().client(client)
.encoder(encoder)
.decoder(decoder)
.contract(contract)
.requestInterceptor(new BasicAuthRequestInterceptor("admin", "admin"))
.target(FooClient.class, "http://PROD-SVC");
}
}</programlisting>
<note>
<simpara>In the above example <literal>FeignClientsConfiguration.class</literal> is the default configuration
provided by Spring Cloud Netflix.</simpara>
</note>
<note>
<simpara><literal>PROD-SVC</literal> is the name of the service the Clients will be making requests to.</simpara>
</note>
<note>
<simpara>The Feign <literal>Contract</literal> object defines what annotations and values are valid on interfaces. The
autowired <literal>Contract</literal> bean provides supports for SpringMVC annotations, instead of
the default Feign native annotations.</simpara>
</note>
</section>
<section xml:id="spring-cloud-feign-hystrix">
<title>Feign Hystrix Support</title>
<simpara>If Hystrix is on the classpath and <literal>feign.hystrix.enabled=true</literal>, Feign will wrap all methods with a circuit breaker. Returning a <literal>com.netflix.hystrix.HystrixCommand</literal> is also available. This lets you use reactive patterns (with a call to <literal>.toObservable()</literal> or <literal>.observe()</literal> or asynchronous use (with a call to <literal>.queue()</literal>).</simpara>
<simpara>To disable Hystrix support on a per-client basis create a vanilla <literal>Feign.Builder</literal> with the "prototype" scope, e.g.:</simpara>
<programlisting language="java" linenumbering="unnumbered">@Configuration
public class FooConfiguration {
@Bean
@Scope("prototype")
public Feign.Builder feignBuilder() {
return Feign.builder();
}
}</programlisting>
<warning>
<simpara>Prior to the Spring Cloud Dalston release, if Hystrix was on the classpath Feign would have wrapped
all methods in a circuit breaker by default. This default behavior was changed in Spring Cloud Dalston in
favor for an opt-in approach.</simpara>
</warning>
</section>
<section xml:id="spring-cloud-feign-hystrix-fallback">
<title>Feign Hystrix Fallbacks</title>
<simpara>Hystrix supports the notion of a fallback: a default code path that is executed when they circuit is open or there is an error. To enable fallbacks for a given <literal>@FeignClient</literal> set the <literal>fallback</literal> attribute to the class name that implements the fallback. You also need to declare your implementation as a Spring bean.</simpara>
<programlisting language="java" linenumbering="unnumbered">@FeignClient(name = "hello", fallback = HystrixClientFallback.class)
protected interface HystrixClient {
@RequestMapping(method = RequestMethod.GET, value = "/hello")
Hello iFailSometimes();
}
static class HystrixClientFallback implements HystrixClient {
@Override
public Hello iFailSometimes() {
return new Hello("fallback");
}
}</programlisting>
<simpara>If one needs access to the cause that made the fallback trigger, one can use the <literal>fallbackFactory</literal> attribute inside <literal>@FeignClient</literal>.</simpara>
<programlisting language="java" linenumbering="unnumbered">@FeignClient(name = "hello", fallbackFactory = HystrixClientFallbackFactory.class)
protected interface HystrixClient {
@RequestMapping(method = RequestMethod.GET, value = "/hello")
Hello iFailSometimes();
}
@Component
static class HystrixClientFallbackFactory implements FallbackFactory&lt;HystrixClient&gt; {
@Override
public HystrixClient create(Throwable cause) {
return new HystrixClient() {
@Override
public Hello iFailSometimes() {
return new Hello("fallback; reason was: " + cause.getMessage());
}
};
}
}</programlisting>
<warning>
<simpara>There is a limitation with the implementation of fallbacks in Feign and how Hystrix fallbacks work. Fallbacks are currently not supported for methods that return <literal>com.netflix.hystrix.HystrixCommand</literal> and <literal>rx.Observable</literal>.</simpara>
</warning>
</section>
<section xml:id="_feign_and_literal_primary_literal">
<title>Feign and <literal>@Primary</literal></title>
<simpara>When using Feign with Hystrix fallbacks, there are multiple beans in the <literal>ApplicationContext</literal> of the same type. This will cause <literal>@Autowired</literal> to not work because there isn&#8217;t exactly one bean, or one marked as primary. To work around this, Spring Cloud Netflix marks all Feign instances as <literal>@Primary</literal>, so Spring Framework will know which bean to inject. In some cases, this may not be desirable. To turn off this behavior set the <literal>primary</literal> attribute of <literal>@FeignClient</literal> to false.</simpara>
<programlisting language="java" linenumbering="unnumbered">@FeignClient(name = "hello", primary = false)
public interface HelloClient {
// methods here
}</programlisting>
</section>
<section xml:id="spring-cloud-feign-inheritance">
<title>Feign Inheritance Support</title>
<simpara>Feign supports boilerplate apis via single-inheritance interfaces.
This allows grouping common operations into convenient base interfaces.</simpara>
<formalpara>
<title>UserService.java</title>
<para>
<programlisting language="java" linenumbering="unnumbered">public interface UserService {
@RequestMapping(method = RequestMethod.GET, value ="/users/{id}")
User getUser(@PathVariable("id") long id);
}</programlisting>
</para>
</formalpara>
<formalpara>
<title>UserResource.java</title>
<para>
<programlisting language="java" linenumbering="unnumbered">@RestController
public class UserResource implements UserService {
}</programlisting>
</para>
</formalpara>
<formalpara>
<title>UserClient.java</title>
<para>
<programlisting language="java" linenumbering="unnumbered">package project.user;
@FeignClient("users")
public interface UserClient extends UserService {
}</programlisting>
</para>
</formalpara>
<note>
<simpara>It is generally not advisable to share an interface between a
server and a client. It introduces tight coupling, and also actually
doesn&#8217;t work with Spring MVC in its current form (method parameter
mapping is not inherited).</simpara>
</note>
</section>
<section xml:id="_feign_request_response_compression">
<title>Feign request/response compression</title>
<simpara>You may consider enabling the request or response GZIP compression for your
Feign requests. You can do this by enabling one of the properties:</simpara>
<programlisting language="java" linenumbering="unnumbered">feign.compression.request.enabled=true
feign.compression.response.enabled=true</programlisting>
<simpara>Feign request compression gives you settings similar to what you may set for your web server:</simpara>
<programlisting language="java" linenumbering="unnumbered">feign.compression.request.enabled=true
feign.compression.request.mime-types=text/xml,application/xml,application/json
feign.compression.request.min-request-size=2048</programlisting>
<simpara>These properties allow you to be selective about the compressed media types and minimum request threshold length.</simpara>
</section>
<section xml:id="_feign_logging">
<title>Feign logging</title>
<simpara>A logger is created for each Feign client created. By default the name of the logger is the full class name of the interface used to create the Feign client. Feign logging only responds to the <literal>DEBUG</literal> level.</simpara>
<formalpara>
<title>application.yml</title>
<para>
<programlisting language="yaml" linenumbering="unnumbered">logging.level.project.user.UserClient: DEBUG</programlisting>
</para>
</formalpara>
<simpara>The <literal>Logger.Level</literal> object that you may configure per client, tells Feign how much to log. Choices are:</simpara>
<itemizedlist>
<listitem>
<simpara><literal>NONE</literal>, No logging (<emphasis role="strong">DEFAULT</emphasis>).</simpara>
</listitem>
<listitem>
<simpara><literal>BASIC</literal>, Log only the request method and URL and the response status code and execution time.</simpara>
</listitem>
<listitem>
<simpara><literal>HEADERS</literal>, Log the basic information along with request and response headers.</simpara>
</listitem>
<listitem>
<simpara><literal>FULL</literal>, Log the headers, body, and metadata for both requests and responses.</simpara>
</listitem>
</itemizedlist>
<simpara>For example, the following would set the <literal>Logger.Level</literal> to <literal>FULL</literal>:</simpara>
<programlisting language="java" linenumbering="unnumbered">@Configuration
public class FooConfiguration {
@Bean
Logger.Level feignLoggerLevel() {
return Logger.Level.FULL;
}
}</programlisting>
</section>
</chapter>
</book>
+35
View File
@@ -0,0 +1,35 @@
/*
code highlight CSS resemblign the Eclipse IDE default color schema
@author Costin Leau
*/
.hl-keyword {
color: #7F0055;
font-weight: bold;
}
.hl-comment {
color: #3F5F5F;
font-style: italic;
}
.hl-multiline-comment {
color: #3F5FBF;
font-style: italic;
}
.hl-tag {
color: #3F7F7F;
}
.hl-attribute {
color: #7F007F;
}
.hl-value {
color: #2A00FF;
}
.hl-string {
color: #2A00FF;
}
+9
View File
@@ -0,0 +1,9 @@
@IMPORT url("manual.css");
body.firstpage {
background: url("../images/background.png") no-repeat center top;
}
div.part h1 {
border-top: none;
}
+6
View File
@@ -0,0 +1,6 @@
@IMPORT url("manual.css");
body {
background: url("../images/background.png") no-repeat center top;
}
+342
View File
@@ -0,0 +1,342 @@
@IMPORT url("highlight.css");
html {
padding: 0pt;
margin: 0pt;
}
body {
color: #333333;
margin: 15px 30px;
font-family: Helvetica, Arial, Freesans, Clean, Sans-serif;
line-height: 1.6;
-webkit-font-smoothing: antialiased;
}
code {
font-size: 16px;
font-family: Consolas, "Liberation Mono", Courier, monospace;
}
:not(a) > code {
color: #6D180B;
}
:not(pre) > code {
background-color: #F2F2F2;
border: 1px solid #CCCCCC;
border-radius: 4px;
padding: 1px 3px 0;
text-shadow: none;
white-space: nowrap;
}
body > *:first-child {
margin-top: 0 !important;
}
div {
margin: 0pt;
}
hr {
border: 1px solid #CCCCCC;
background: #CCCCCC;
}
h1, h2, h3, h4, h5, h6 {
color: #000000;
cursor: text;
font-weight: bold;
margin: 30px 0 10px;
padding: 0;
}
h1, h2, h3 {
margin: 40px 0 10px;
}
h1 {
margin: 70px 0 30px;
padding-top: 20px;
}
div.part h1 {
border-top: 1px dotted #CCCCCC;
}
h1, h1 code {
font-size: 32px;
}
h2, h2 code {
font-size: 24px;
}
h3, h3 code {
font-size: 20px;
}
h4, h1 code, h5, h5 code, h6, h6 code {
font-size: 18px;
}
div.book, div.chapter, div.appendix, div.part, div.preface {
min-width: 300px;
max-width: 1200px;
margin: 0 auto;
}
p.releaseinfo {
font-weight: bold;
margin-bottom: 40px;
margin-top: 40px;
}
div.authorgroup {
line-height: 1;
}
p.copyright {
line-height: 1;
margin-bottom: -5px;
}
.legalnotice p {
font-style: italic;
font-size: 14px;
line-height: 1;
}
div.titlepage + p, div.titlepage + p {
margin-top: 0;
}
pre {
line-height: 1.0;
color: black;
}
a {
color: #4183C4;
text-decoration: none;
}
p {
margin: 15px 0;
text-align: left;
}
ul, ol {
padding-left: 30px;
}
li p {
margin: 0;
}
div.table {
margin: 1em;
padding: 0.5em;
text-align: center;
}
div.table table, div.informaltable table {
display: table;
width: 100%;
}
div.table td {
padding-left: 7px;
padding-right: 7px;
}
.sidebar {
line-height: 1.4;
padding: 0 20px;
background-color: #F8F8F8;
border: 1px solid #CCCCCC;
border-radius: 3px 3px 3px 3px;
}
.sidebar p.title {
color: #6D180B;
}
pre.programlisting, pre.screen {
font-size: 15px;
padding: 6px 10px;
background-color: #F8F8F8;
border: 1px solid #CCCCCC;
border-radius: 3px 3px 3px 3px;
clear: both;
overflow: auto;
line-height: 1.4;
font-family: Consolas, "Liberation Mono", Courier, monospace;
}
table {
border-collapse: collapse;
border-spacing: 0;
border: 1px solid #DDDDDD !important;
border-radius: 4px !important;
border-collapse: separate !important;
line-height: 1.6;
}
table thead {
background: #F5F5F5;
}
table tr {
border: none;
border-bottom: none;
}
table th {
font-weight: bold;
}
table th, table td {
border: none !important;
padding: 6px 13px;
}
table tr:nth-child(2n) {
background-color: #F8F8F8;
}
td p {
margin: 0 0 15px 0;
}
div.table-contents td p {
margin: 0;
}
div.important *, div.note *, div.tip *, div.warning *, div.navheader *, div.navfooter *, div.calloutlist * {
border: none !important;
background: none !important;
margin: 0;
}
div.important p, div.note p, div.tip p, div.warning p {
color: #6F6F6F;
line-height: 1.6;
}
div.important code, div.note code, div.tip code, div.warning code {
background-color: #F2F2F2 !important;
border: 1px solid #CCCCCC !important;
border-radius: 4px !important;
padding: 1px 3px 0 !important;
text-shadow: none !important;
white-space: nowrap !important;
}
.note th, .tip th, .warning th {
display: none;
}
.note tr:first-child td, .tip tr:first-child td, .warning tr:first-child td {
border-right: 1px solid #CCCCCC !important;
padding-top: 10px;
}
div.calloutlist p, div.calloutlist td {
padding: 0;
margin: 0;
}
div.calloutlist > table > tbody > tr > td:first-child {
padding-left: 10px;
width: 30px !important;
}
div.important, div.note, div.tip, div.warning {
margin-left: 0px !important;
margin-right: 20px !important;
margin-top: 20px;
margin-bottom: 20px;
padding-top: 10px;
padding-bottom: 10px;
}
div.toc {
line-height: 1.2;
}
dl, dt {
margin-top: 1px;
margin-bottom: 0;
}
div.toc > dl > dt {
font-size: 32px;
font-weight: bold;
margin: 30px 0 10px 0;
display: block;
}
div.toc > dl > dd > dl > dt {
font-size: 24px;
font-weight: bold;
margin: 20px 0 10px 0;
display: block;
}
div.toc > dl > dd > dl > dd > dl > dt {
font-weight: bold;
font-size: 20px;
margin: 10px 0 0 0;
}
tbody.footnotes * {
border: none !important;
}
div.footnote p {
margin: 0;
line-height: 1;
}
div.footnote p sup {
margin-right: 6px;
vertical-align: middle;
}
div.navheader {
border-bottom: 1px solid #CCCCCC;
}
div.navfooter {
border-top: 1px solid #CCCCCC;
}
.title {
margin-left: -1em;
padding-left: 1em;
}
.title > a {
position: absolute;
visibility: hidden;
display: block;
font-size: 0.85em;
margin-top: 0.05em;
margin-left: -1em;
vertical-align: text-top;
color: black;
}
.title > a:before {
content: "\00A7";
}
.title:hover > a, .title > a:hover, .title:hover > a:hover {
visibility: visible;
}
.title:focus > a, .title > a:focus, .title:focus > a:focus {
outline: 0;
}
+330
View File
@@ -0,0 +1,330 @@
#!/bin/bash -x
set -e
# Set default props like MAVEN_PATH, ROOT_FOLDER etc.
function set_default_props() {
# The script should be executed from the root folder
ROOT_FOLDER=`pwd`
echo "Current folder is ${ROOT_FOLDER}"
if [[ ! -e "${ROOT_FOLDER}/.git" ]]; then
echo "You're not in the root folder of the project!"
exit 1
fi
# Prop that will let commit the changes
COMMIT_CHANGES="no"
MAVEN_PATH=${MAVEN_PATH:-}
echo "Path to Maven is [${MAVEN_PATH}]"
REPO_NAME=${PWD##*/}
echo "Repo name is [${REPO_NAME}]"
SPRING_CLOUD_STATIC_REPO=${SPRING_CLOUD_STATIC_REPO:-git@github.com:spring-cloud/spring-cloud-static.git}
echo "Spring Cloud Static repo is [${SPRING_CLOUD_STATIC_REPO}"
}
# Check if gh-pages exists and docs have been built
function check_if_anything_to_sync() {
git remote set-url --push origin `git config remote.origin.url | sed -e 's/^git:/https:/'`
if ! (git remote set-branches --add origin gh-pages && git fetch -q); then
echo "No gh-pages, so not syncing"
exit 0
fi
if ! [ -d docs/target/generated-docs ] && ! [ "${BUILD}" == "yes" ]; then
echo "No gh-pages sources in docs/target/generated-docs, so not syncing"
exit 0
fi
}
function retrieve_current_branch() {
# Code getting the name of the current branch. For master we want to publish as we did until now
# http://stackoverflow.com/questions/1593051/how-to-programmatically-determine-the-current-checked-out-git-branch
# If there is a branch already passed will reuse it - otherwise will try to find it
CURRENT_BRANCH=${BRANCH}
if [[ -z "${CURRENT_BRANCH}" ]] ; then
CURRENT_BRANCH=$(git symbolic-ref -q HEAD)
CURRENT_BRANCH=${CURRENT_BRANCH##refs/heads/}
CURRENT_BRANCH=${CURRENT_BRANCH:-HEAD}
fi
echo "Current branch is [${CURRENT_BRANCH}]"
git checkout ${CURRENT_BRANCH} || echo "Failed to check the branch... continuing with the script"
}
# Switches to the provided value of the release version. We always prefix it with `v`
function switch_to_tag() {
git checkout v${VERSION}
}
# Build the docs if switch is on
function build_docs_if_applicable() {
if [[ "${BUILD}" == "yes" ]] ; then
./mvnw clean install -P docs -pl docs -DskipTests
fi
}
# Get the name of the `docs.main` property
# Get whitelisted branches - assumes that a `docs` module is available under `docs` profile
function retrieve_doc_properties() {
MAIN_ADOC_VALUE=$("${MAVEN_PATH}"mvn -q \
-Dexec.executable="echo" \
-Dexec.args='${docs.main}' \
--non-recursive \
org.codehaus.mojo:exec-maven-plugin:1.3.1:exec)
echo "Extracted 'main.adoc' from Maven build [${MAIN_ADOC_VALUE}]"
WHITELIST_PROPERTY=${WHITELIST_PROPERTY:-"docs.whitelisted.branches"}
WHITELISTED_BRANCHES_VALUE=$("${MAVEN_PATH}"mvn -q \
-Dexec.executable="echo" \
-Dexec.args="\${${WHITELIST_PROPERTY}}" \
org.codehaus.mojo:exec-maven-plugin:1.3.1:exec \
-P docs \
-pl docs)
echo "Extracted '${WHITELIST_PROPERTY}' from Maven build [${WHITELISTED_BRANCHES_VALUE}]"
}
# Stash any outstanding changes
function stash_changes() {
git diff-index --quiet HEAD && dirty=$? || (echo "Failed to check if the current repo is dirty. Assuming that it is." && dirty="1")
if [ "$dirty" != "0" ]; then git stash; fi
}
# Switch to gh-pages branch to sync it with current branch
function add_docs_from_target() {
local DESTINATION_REPO_FOLDER
if [[ -z "${DESTINATION}" && -z "${CLONE}" ]] ; then
DESTINATION_REPO_FOLDER=${ROOT_FOLDER}
elif [[ "${CLONE}" == "yes" ]]; then
mkdir -p ${ROOT_FOLDER}/target
local clonedStatic=${ROOT_FOLDER}/target/spring-cloud-static
if [[ ! -e "${clonedStatic}/.git" ]]; then
echo "Cloning Spring Cloud Static to target"
git clone ${SPRING_CLOUD_STATIC_REPO} ${clonedStatic} && git checkout gh-pages
else
echo "Spring Cloud Static already cloned - will pull changes"
cd ${clonedStatic} && git checkout gh-pages && git pull origin gh-pages
fi
DESTINATION_REPO_FOLDER=${clonedStatic}/${REPO_NAME}
mkdir -p ${DESTINATION_REPO_FOLDER}
else
if [[ ! -e "${DESTINATION}/.git" ]]; then
echo "[${DESTINATION}] is not a git repository"
exit 1
fi
DESTINATION_REPO_FOLDER=${DESTINATION}/${REPO_NAME}
mkdir -p ${DESTINATION_REPO_FOLDER}
echo "Destination was provided [${DESTINATION}]"
fi
cd ${DESTINATION_REPO_FOLDER}
git checkout gh-pages
git pull origin gh-pages
# Add git branches
###################################################################
if [[ -z "${VERSION}" ]] ; then
copy_docs_for_current_version
else
copy_docs_for_provided_version
fi
commit_changes_if_applicable
}
# Copies the docs by using the retrieved properties from Maven build
function copy_docs_for_current_version() {
if [[ "${CURRENT_BRANCH}" == "master" ]] ; then
echo -e "Current branch is master - will copy the current docs only to the root folder"
for f in docs/target/generated-docs/*; do
file=${f#docs/target/generated-docs/*}
if ! git ls-files -i -o --exclude-standard --directory | grep -q ^$file$; then
# Not ignored...
cp -rf $f ${ROOT_FOLDER}/
git add -A ${ROOT_FOLDER}/$file
fi
done
COMMIT_CHANGES="yes"
else
echo -e "Current branch is [${CURRENT_BRANCH}]"
# http://stackoverflow.com/questions/29300806/a-bash-script-to-check-if-a-string-is-present-in-a-comma-separated-list-of-strin
if [[ ",${WHITELISTED_BRANCHES_VALUE}," = *",${CURRENT_BRANCH},"* ]] ; then
mkdir -p ${ROOT_FOLDER}/${CURRENT_BRANCH}
echo -e "Branch [${CURRENT_BRANCH}] is whitelisted! Will copy the current docs to the [${CURRENT_BRANCH}] folder"
for f in docs/target/generated-docs/*; do
file=${f#docs/target/generated-docs/*}
if ! git ls-files -i -o --exclude-standard --directory | grep -q ^$file$; then
# Not ignored...
# We want users to access 1.0.0.RELEASE/ instead of 1.0.0.RELEASE/spring-cloud.sleuth.html
if [[ "${file}" == "${MAIN_ADOC_VALUE}.html" ]] ; then
# We don't want to copy the spring-cloud-sleuth.html
# we want it to be converted to index.html
cp -rf $f ${ROOT_FOLDER}/${CURRENT_BRANCH}/index.html
git add -A ${ROOT_FOLDER}/${CURRENT_BRANCH}/index.html
else
cp -rf $f ${ROOT_FOLDER}/${CURRENT_BRANCH}
git add -A ${ROOT_FOLDER}/${CURRENT_BRANCH}/$file
fi
fi
done
COMMIT_CHANGES="yes"
else
echo -e "Branch [${CURRENT_BRANCH}] is not on the white list! Check out the Maven [${WHITELIST_PROPERTY}] property in
[docs] module available under [docs] profile. Won't commit any changes to gh-pages for this branch."
fi
fi
}
# Copies the docs by using the explicitly provided version
function copy_docs_for_provided_version() {
local FOLDER=${DESTINATION_REPO_FOLDER}/${VERSION}
mkdir -p ${FOLDER}
echo -e "Current tag is [v${VERSION}] Will copy the current docs to the [${FOLDER}] folder"
for f in ${ROOT_FOLDER}/docs/target/generated-docs/*; do
file=${f#${ROOT_FOLDER}/docs/target/generated-docs/*}
copy_docs_for_branch ${file} ${FOLDER}
done
COMMIT_CHANGES="yes"
CURRENT_BRANCH="v${VERSION}"
}
# Copies the docs from target to the provided destination
# Params:
# $1 - file from target
# $2 - destination to which copy the files
function copy_docs_for_branch() {
local file=$1
local destination=$2
if ! git ls-files -i -o --exclude-standard --directory | grep -q ^${file}$; then
# Not ignored...
# We want users to access 1.0.0.RELEASE/ instead of 1.0.0.RELEASE/spring-cloud.sleuth.html
if [[ ("${file}" == "${MAIN_ADOC_VALUE}.html") || ("${file}" == "${REPO_NAME}.html") ]] ; then
# We don't want to copy the spring-cloud-sleuth.html
# we want it to be converted to index.html
cp -rf $f ${destination}/index.html
git add -A ${destination}/index.html
else
cp -rf $f ${destination}
git add -A ${destination}/$file
fi
fi
}
function commit_changes_if_applicable() {
if [[ "${COMMIT_CHANGES}" == "yes" ]] ; then
COMMIT_SUCCESSFUL="no"
git commit -a -m "Sync docs from ${CURRENT_BRANCH} to gh-pages" && COMMIT_SUCCESSFUL="yes" || echo "Failed to commit changes"
# Uncomment the following push if you want to auto push to
# the gh-pages branch whenever you commit to master locally.
# This is a little extreme. Use with care!
###################################################################
if [[ "${COMMIT_SUCCESSFUL}" == "yes" ]] ; then
git push origin gh-pages
fi
fi
}
# Switch back to the previous branch and exit block
function checkout_previous_branch() {
# If -version was provided we need to come back to root project
cd ${ROOT_FOLDER}
git checkout ${CURRENT_BRANCH} || echo "Failed to check the branch... continuing with the script"
if [ "$dirty" != "0" ]; then git stash pop; fi
exit 0
}
# Assert if properties have been properly passed
function assert_properties() {
echo "VERSION [${VERSION}], DESTINATION [${DESTINATION}], CLONE [${CLONE}]"
if [[ "${VERSION}" != "" && (-z "${DESTINATION}" && -z "${CLONE}") ]] ; then echo "Version was set but destination / clone was not!"; exit 1;fi
if [[ ("${DESTINATION}" != "" && "${CLONE}" != "") && -z "${VERSION}" ]] ; then echo "Destination / clone was set but version was not!"; exit 1;fi
if [[ "${DESTINATION}" != "" && "${CLONE}" == "yes" ]] ; then echo "Destination and clone was set. Pick one!"; exit 1;fi
}
# Prints the usage
function print_usage() {
cat <<EOF
The idea of this script is to update gh-pages branch with the generated docs. Without any options
the script will work in the following manner:
- if there's no gh-pages / target for docs module then the script ends
- for master branch the generated docs are copied to the root of gh-pages branch
- for any other branch (if that branch is whitelisted) a subfolder with branch name is created
and docs are copied there
- if the version switch is passed (-v) then a tag with (v) prefix will be retrieved and a folder
with that version number will be created in the gh-pages branch. WARNING! No whitelist verification will take place
- if the destination switch is passed (-d) then the script will check if the provided dir is a git repo and then will
switch to gh-pages of that repo and copy the generated docs to `docs/<project-name>/<version>`
- if the destination switch is passed (-d) then the script will check if the provided dir is a git repo and then will
switch to gh-pages of that repo and copy the generated docs to `docs/<project-name>/<version>`
USAGE:
You can use the following options:
-v|--version - the script will apply the whole procedure for a particular library version
-d|--destination - the root of destination folder where the docs should be copied. You have to use the full path.
E.g. point to spring-cloud-static folder. Can't be used with (-c)
-b|--build - will run the standard build process after checking out the branch
-c|--clone - will automatically clone the spring-cloud-static repo instead of providing the destination.
Obviously can't be used with (-d)
EOF
}
# ==========================================
# ____ ____ _____ _____ _____ _______
# / ____|/ ____| __ \|_ _| __ \__ __|
# | (___ | | | |__) | | | | |__) | | |
# \___ \| | | _ / | | | ___/ | |
# ____) | |____| | \ \ _| |_| | | |
# |_____/ \_____|_| \_\_____|_| |_|
#
# ==========================================
while [[ $# > 0 ]]
do
key="$1"
case ${key} in
-v|--version)
VERSION="$2"
shift # past argument
;;
-d|--destination)
DESTINATION="$2"
shift # past argument
;;
-b|--build)
BUILD="yes"
;;
-c|--clone)
CLONE="yes"
;;
-h|--help)
print_usage
exit 0
;;
*)
echo "Invalid option: [$1]"
print_usage
exit 1
;;
esac
shift # past argument or value
done
assert_properties
set_default_props
check_if_anything_to_sync
if [[ -z "${VERSION}" ]] ; then
retrieve_current_branch
else
switch_to_tag
fi
build_docs_if_applicable
retrieve_doc_properties
stash_changes
add_docs_from_target
checkout_previous_branch
Binary file not shown.

After

Width:  |  Height:  |  Size: 18 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 329 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 353 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 350 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 931 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.1 KiB

+117
View File
@@ -0,0 +1,117 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<!--[if IE]><meta http-equiv="X-UA-Compatible" content="IE=edge"><![endif]-->
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta name="generator" content="Asciidoctor 1.5.7.1">
<title>spring-cloud-openfeign</title>
<link rel="stylesheet" href="css/manual-singlepage.css">
<style>
.hidden {
display: none;
}
.switch {
border-width: 1px 1px 0 1px;
border-style: solid;
border-color: #7a2518;
display: inline-block;
}
.switch--item {
padding: 10px;
background-color: #ffffff;
color: #7a2518;
display: inline-block;
cursor: pointer;
}
.switch--item.selected {
background-color: #7a2519;
color: #ffffff;
}
</style>
<script src="http://cdnjs.cloudflare.com/ajax/libs/zepto/1.2.0/zepto.min.js"></script>
<script type="text/javascript">
function addBlockSwitches() {
$('.primary').each(function() {
primary = $(this);
createSwitchItem(primary, createBlockSwitch(primary)).item.addClass("selected");
primary.children('.title').remove();
});
$('.secondary').each(function(idx, node) {
secondary = $(node);
primary = findPrimary(secondary);
switchItem = createSwitchItem(secondary, primary.children('.switch'));
switchItem.content.addClass('hidden');
findPrimary(secondary).append(switchItem.content);
secondary.remove();
});
}
function createBlockSwitch(primary) {
blockSwitch = $('<div class="switch"></div>');
primary.prepend(blockSwitch);
return blockSwitch;
}
function findPrimary(secondary) {
candidate = secondary.prev();
while (!candidate.is('.primary')) {
candidate = candidate.prev();
}
return candidate;
}
function createSwitchItem(block, blockSwitch) {
blockName = block.children('.title').text();
content = block.children('.content').first().append(block.next('.colist'));
item = $('<div class="switch--item">' + blockName + '</div>');
item.on('click', '', content, function(e) {
$(this).addClass('selected');
$(this).siblings().removeClass('selected');
e.data.siblings('.content').addClass('hidden');
e.data.removeClass('hidden');
});
blockSwitch.append(item);
return {'item': item, 'content': content};
}
$(addBlockSwitches);
</script>
</head>
<body class="article">
<div id="header">
<h1>spring-cloud-openfeign</h1>
</div>
<div id="content">
<div id="preamble">
<div class="sectionbody">
<div class="paragraph">
<p>2.1.3.BUILD-SNAPSHOT</p>
</div>
</div>
</div>
<div class="sect1">
<h2 id="_pick_the_documentation_option">Pick The Documentation Option</h2>
<div class="sectionbody">
<div class="ulist">
<ul>
<li>
<p><a href="single/spring-cloud-openfeign.html">Single HTML</a></p>
</li>
<li>
<p><a href="multi/multi_spring-cloud-openfeign.html">Multi HTML</a></p>
</li>
</ul>
</div>
</div>
</div>
</div>
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/prettify/r298/prettify.min.css">
<script src="https://cdnjs.cloudflare.com/ajax/libs/prettify/r298/prettify.min.js"></script>
<script>prettyPrint()</script>
</body>
</html>
+35
View File
@@ -0,0 +1,35 @@
/*
code highlight CSS resemblign the Eclipse IDE default color schema
@author Costin Leau
*/
.hl-keyword {
color: #7F0055;
font-weight: bold;
}
.hl-comment {
color: #3F5F5F;
font-style: italic;
}
.hl-multiline-comment {
color: #3F5FBF;
font-style: italic;
}
.hl-tag {
color: #3F7F7F;
}
.hl-attribute {
color: #7F007F;
}
.hl-value {
color: #2A00FF;
}
.hl-string {
color: #2A00FF;
}
+9
View File
@@ -0,0 +1,9 @@
@IMPORT url("manual.css");
body.firstpage {
background: url("../images/background.png") no-repeat center top;
}
div.part h1 {
border-top: none;
}
+6
View File
@@ -0,0 +1,6 @@
@IMPORT url("manual.css");
body {
background: url("../images/background.png") no-repeat center top;
}
+342
View File
@@ -0,0 +1,342 @@
@IMPORT url("highlight.css");
html {
padding: 0pt;
margin: 0pt;
}
body {
color: #333333;
margin: 15px 30px;
font-family: Helvetica, Arial, Freesans, Clean, Sans-serif;
line-height: 1.6;
-webkit-font-smoothing: antialiased;
}
code {
font-size: 16px;
font-family: Consolas, "Liberation Mono", Courier, monospace;
}
:not(a) > code {
color: #6D180B;
}
:not(pre) > code {
background-color: #F2F2F2;
border: 1px solid #CCCCCC;
border-radius: 4px;
padding: 1px 3px 0;
text-shadow: none;
white-space: nowrap;
}
body > *:first-child {
margin-top: 0 !important;
}
div {
margin: 0pt;
}
hr {
border: 1px solid #CCCCCC;
background: #CCCCCC;
}
h1, h2, h3, h4, h5, h6 {
color: #000000;
cursor: text;
font-weight: bold;
margin: 30px 0 10px;
padding: 0;
}
h1, h2, h3 {
margin: 40px 0 10px;
}
h1 {
margin: 70px 0 30px;
padding-top: 20px;
}
div.part h1 {
border-top: 1px dotted #CCCCCC;
}
h1, h1 code {
font-size: 32px;
}
h2, h2 code {
font-size: 24px;
}
h3, h3 code {
font-size: 20px;
}
h4, h1 code, h5, h5 code, h6, h6 code {
font-size: 18px;
}
div.book, div.chapter, div.appendix, div.part, div.preface {
min-width: 300px;
max-width: 1200px;
margin: 0 auto;
}
p.releaseinfo {
font-weight: bold;
margin-bottom: 40px;
margin-top: 40px;
}
div.authorgroup {
line-height: 1;
}
p.copyright {
line-height: 1;
margin-bottom: -5px;
}
.legalnotice p {
font-style: italic;
font-size: 14px;
line-height: 1;
}
div.titlepage + p, div.titlepage + p {
margin-top: 0;
}
pre {
line-height: 1.0;
color: black;
}
a {
color: #4183C4;
text-decoration: none;
}
p {
margin: 15px 0;
text-align: left;
}
ul, ol {
padding-left: 30px;
}
li p {
margin: 0;
}
div.table {
margin: 1em;
padding: 0.5em;
text-align: center;
}
div.table table, div.informaltable table {
display: table;
width: 100%;
}
div.table td {
padding-left: 7px;
padding-right: 7px;
}
.sidebar {
line-height: 1.4;
padding: 0 20px;
background-color: #F8F8F8;
border: 1px solid #CCCCCC;
border-radius: 3px 3px 3px 3px;
}
.sidebar p.title {
color: #6D180B;
}
pre.programlisting, pre.screen {
font-size: 15px;
padding: 6px 10px;
background-color: #F8F8F8;
border: 1px solid #CCCCCC;
border-radius: 3px 3px 3px 3px;
clear: both;
overflow: auto;
line-height: 1.4;
font-family: Consolas, "Liberation Mono", Courier, monospace;
}
table {
border-collapse: collapse;
border-spacing: 0;
border: 1px solid #DDDDDD !important;
border-radius: 4px !important;
border-collapse: separate !important;
line-height: 1.6;
}
table thead {
background: #F5F5F5;
}
table tr {
border: none;
border-bottom: none;
}
table th {
font-weight: bold;
}
table th, table td {
border: none !important;
padding: 6px 13px;
}
table tr:nth-child(2n) {
background-color: #F8F8F8;
}
td p {
margin: 0 0 15px 0;
}
div.table-contents td p {
margin: 0;
}
div.important *, div.note *, div.tip *, div.warning *, div.navheader *, div.navfooter *, div.calloutlist * {
border: none !important;
background: none !important;
margin: 0;
}
div.important p, div.note p, div.tip p, div.warning p {
color: #6F6F6F;
line-height: 1.6;
}
div.important code, div.note code, div.tip code, div.warning code {
background-color: #F2F2F2 !important;
border: 1px solid #CCCCCC !important;
border-radius: 4px !important;
padding: 1px 3px 0 !important;
text-shadow: none !important;
white-space: nowrap !important;
}
.note th, .tip th, .warning th {
display: none;
}
.note tr:first-child td, .tip tr:first-child td, .warning tr:first-child td {
border-right: 1px solid #CCCCCC !important;
padding-top: 10px;
}
div.calloutlist p, div.calloutlist td {
padding: 0;
margin: 0;
}
div.calloutlist > table > tbody > tr > td:first-child {
padding-left: 10px;
width: 30px !important;
}
div.important, div.note, div.tip, div.warning {
margin-left: 0px !important;
margin-right: 20px !important;
margin-top: 20px;
margin-bottom: 20px;
padding-top: 10px;
padding-bottom: 10px;
}
div.toc {
line-height: 1.2;
}
dl, dt {
margin-top: 1px;
margin-bottom: 0;
}
div.toc > dl > dt {
font-size: 32px;
font-weight: bold;
margin: 30px 0 10px 0;
display: block;
}
div.toc > dl > dd > dl > dt {
font-size: 24px;
font-weight: bold;
margin: 20px 0 10px 0;
display: block;
}
div.toc > dl > dd > dl > dd > dl > dt {
font-weight: bold;
font-size: 20px;
margin: 10px 0 0 0;
}
tbody.footnotes * {
border: none !important;
}
div.footnote p {
margin: 0;
line-height: 1;
}
div.footnote p sup {
margin-right: 6px;
vertical-align: middle;
}
div.navheader {
border-bottom: 1px solid #CCCCCC;
}
div.navfooter {
border-top: 1px solid #CCCCCC;
}
.title {
margin-left: -1em;
padding-left: 1em;
}
.title > a {
position: absolute;
visibility: hidden;
display: block;
font-size: 0.85em;
margin-top: 0.05em;
margin-left: -1em;
vertical-align: text-top;
color: black;
}
.title > a:before {
content: "\00A7";
}
.title:hover > a, .title > a:hover, .title:hover > a:hover {
visibility: visible;
}
.title:focus > a, .title > a:focus, .title:focus > a:focus {
outline: 0;
}
Binary file not shown.

After

Width:  |  Height:  |  Size: 18 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 329 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 353 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 350 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 931 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.1 KiB

+4
View File
@@ -0,0 +1,4 @@
<html><head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title></title><link rel="stylesheet" type="text/css" href="css/manual-multipage.css"><meta name="generator" content="DocBook XSL Stylesheets V1.79.1"><link rel="home" href="multi_spring-cloud-openfeign.html" title="Spring Cloud OpenFeign"><link rel="up" href="multi_spring-cloud-openfeign.html" title="Spring Cloud OpenFeign"><link rel="prev" href="multi_spring-cloud-openfeign.html" title="Spring Cloud OpenFeign"><link rel="next" href="multi_spring-cloud-feign.html" title="1.&nbsp;Declarative REST Client: Feign"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center"></th></tr><tr><td width="20%" align="left"><a accesskey="p" href="multi_spring-cloud-openfeign.html">Prev</a>&nbsp;</td><th width="60%" align="center">&nbsp;</th><td width="20%" align="right">&nbsp;<a accesskey="n" href="multi_spring-cloud-feign.html">Next</a></td></tr></table><hr></div><div class="preface"><div class="titlepage"><div><div><h1 class="title"><a name="d0e9" href="#d0e9"></a></h1></div></div></div><p><span class="strong"><strong>2.1.6.BUILD-SNAPSHOT</strong></span></p><p>This project provides OpenFeign integrations for Spring Boot apps through autoconfiguration
and binding to the Spring Environment and other Spring programming model idioms.</p></div><div class="navfooter"><hr><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="multi_spring-cloud-openfeign.html">Prev</a>&nbsp;</td><td width="20%" align="center">&nbsp;</td><td width="40%" align="right">&nbsp;<a accesskey="n" href="multi_spring-cloud-feign.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Spring Cloud OpenFeign&nbsp;</td><td width="20%" align="center"><a accesskey="h" href="multi_spring-cloud-openfeign.html">Home</a></td><td width="40%" align="right" valign="top">&nbsp;1.&nbsp;Declarative REST Client: Feign</td></tr></table></div></body></html>
+221
View File
@@ -0,0 +1,221 @@
<html><head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>1.&nbsp;Declarative REST Client: Feign</title><link rel="stylesheet" type="text/css" href="css/manual-multipage.css"><meta name="generator" content="DocBook XSL Stylesheets V1.79.1"><link rel="home" href="multi_spring-cloud-openfeign.html" title="Spring Cloud OpenFeign"><link rel="up" href="multi_spring-cloud-openfeign.html" title="Spring Cloud OpenFeign"><link rel="prev" href="multi_pr01.html" title=""></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">1.&nbsp;Declarative REST Client: Feign</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="multi_pr01.html">Prev</a>&nbsp;</td><th width="60%" align="center">&nbsp;</th><td width="20%" align="right">&nbsp;</td></tr></table><hr></div><div class="chapter"><div class="titlepage"><div><div><h1 class="title"><a name="spring-cloud-feign" href="#spring-cloud-feign"></a>1.&nbsp;Declarative REST Client: Feign</h1></div></div></div><p><a class="link" href="https://github.com/Netflix/feign" target="_top">Feign</a> is a declarative web service client. It makes writing web service clients easier. To use Feign create an interface and annotate it. It has pluggable annotation support including Feign annotations and JAX-RS annotations. Feign also supports pluggable encoders and decoders. Spring Cloud adds support for Spring MVC annotations and for using the same <code class="literal">HttpMessageConverters</code> used by default in Spring Web. Spring Cloud integrates Ribbon and Eureka to provide a load balanced http client when using Feign.</p><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="netflix-feign-starter" href="#netflix-feign-starter"></a>1.1&nbsp;How to Include Feign</h2></div></div></div><p>To include Feign in your project use the starter with group <code class="literal">org.springframework.cloud</code>
and artifact id <code class="literal">spring-cloud-starter-openfeign</code>. See the <a class="link" href="https://projects.spring.io/spring-cloud/" target="_top">Spring Cloud Project page</a>
for details on setting up your build system with the current Spring Cloud Release Train.</p><p>Example spring boot app</p><pre class="programlisting"><xslthl:annotation xmlns:xslthl="http://xslthl.sourceforge.net/">@SpringBootApplication</xslthl:annotation>
<xslthl:annotation xmlns:xslthl="http://xslthl.sourceforge.net/">@EnableFeignClients</xslthl:annotation>
<span xmlns:d="http://docbook.org/ns/docbook" class="hl-keyword">public</span> <span xmlns:d="http://docbook.org/ns/docbook" class="hl-keyword">class</span> Application {
<span xmlns:d="http://docbook.org/ns/docbook" class="hl-keyword">public</span> <span xmlns:d="http://docbook.org/ns/docbook" class="hl-keyword">static</span> <span xmlns:d="http://docbook.org/ns/docbook" class="hl-keyword">void</span> main(String[] args) {
SpringApplication.run(Application.<span xmlns:d="http://docbook.org/ns/docbook" class="hl-keyword">class</span>, args);
}
}</pre><p><b>StoreClient.java.&nbsp;</b>
</p><pre class="programlisting"><xslthl:annotation xmlns:xslthl="http://xslthl.sourceforge.net/">@FeignClient("stores")</xslthl:annotation>
<span xmlns:d="http://docbook.org/ns/docbook" class="hl-keyword">public</span> <span xmlns:d="http://docbook.org/ns/docbook" class="hl-keyword">interface</span> StoreClient {
<xslthl:annotation xmlns:xslthl="http://xslthl.sourceforge.net/">@RequestMapping(method = RequestMethod.GET, value = "/stores")</xslthl:annotation>
List&lt;Store&gt; getStores();
<xslthl:annotation xmlns:xslthl="http://xslthl.sourceforge.net/">@RequestMapping(method = RequestMethod.POST, value = "/stores/{storeId}", consumes = "application/json")</xslthl:annotation>
Store update(<xslthl:annotation xmlns:xslthl="http://xslthl.sourceforge.net/">@PathVariable("storeId")</xslthl:annotation> Long storeId, Store store);
}</pre><p>
</p><p>In the <code class="literal">@FeignClient</code> annotation the String value ("stores" above) is
an arbitrary client name, which is used to create a Ribbon load
balancer (see <a class="link" href="">below for details of Ribbon
support</a>). You can also specify a URL using the <code class="literal">url</code> attribute
(absolute value or just a hostname). The name of the bean in the
application context is the fully qualified name of the interface.
To specify your own alias value you can use the <code class="literal">qualifier</code> value
of the <code class="literal">@FeignClient</code> annotation.</p><p>The Ribbon client above will want to discover the physical addresses
for the "stores" service. If your application is a Eureka client then
it will resolve the service in the Eureka service registry. If you
don&#8217;t want to use Eureka, you can simply configure a list of servers
in your external configuration (see
<a class="link" href="">above for example</a>).</p></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="spring-cloud-feign-overriding-defaults" href="#spring-cloud-feign-overriding-defaults"></a>1.2&nbsp;Overriding Feign Defaults</h2></div></div></div><p>A central concept in Spring Cloud&#8217;s Feign support is that of the named client. Each feign client is part of an ensemble of components that work together to contact a remote server on demand, and the ensemble has a name that you give it as an application developer using the <code class="literal">@FeignClient</code> annotation. Spring Cloud creates a new ensemble as an
<code class="literal">ApplicationContext</code> on demand for each named client using <code class="literal">FeignClientsConfiguration</code>. This contains (amongst other things) an <code class="literal">feign.Decoder</code>, a <code class="literal">feign.Encoder</code>, and a <code class="literal">feign.Contract</code>.
It is possible to override the name of that ensemble by using the <code class="literal">contextId</code>
attribute of the <code class="literal">@FeignClient</code> annotation.</p><p>Spring Cloud lets you take full control of the feign client by declaring additional configuration (on top of the <code class="literal">FeignClientsConfiguration</code>) using <code class="literal">@FeignClient</code>. Example:</p><pre class="programlisting"><xslthl:annotation xmlns:xslthl="http://xslthl.sourceforge.net/">@FeignClient(name = "stores", configuration = FooConfiguration.class)</xslthl:annotation>
<span xmlns:d="http://docbook.org/ns/docbook" class="hl-keyword">public</span> <span xmlns:d="http://docbook.org/ns/docbook" class="hl-keyword">interface</span> StoreClient {
<span xmlns:d="http://docbook.org/ns/docbook" class="hl-comment">//..</span>
}</pre><p>In this case the client is composed from the components already in <code class="literal">FeignClientsConfiguration</code> together with any in <code class="literal">FooConfiguration</code> (where the latter will override the former).</p><div class="note" style="margin-left: 0.5in; margin-right: 0.5in;"><table border="0" summary="Note"><tr><td rowspan="2" align="center" valign="top" width="25"><img alt="[Note]" src="images/note.png"></td><th align="left">Note</th></tr><tr><td align="left" valign="top"><p><code class="literal">FooConfiguration</code> does not need to be annotated with <code class="literal">@Configuration</code>. However, if it is, then take care to exclude it from any <code class="literal">@ComponentScan</code> that would otherwise include this configuration as it will become the default source for <code class="literal">feign.Decoder</code>, <code class="literal">feign.Encoder</code>, <code class="literal">feign.Contract</code>, etc., when specified. This can be avoided by putting it in a separate, non-overlapping package from any <code class="literal">@ComponentScan</code> or <code class="literal">@SpringBootApplication</code>, or it can be explicitly excluded in <code class="literal">@ComponentScan</code>.</p></td></tr></table></div><div class="note" style="margin-left: 0.5in; margin-right: 0.5in;"><table border="0" summary="Note"><tr><td rowspan="2" align="center" valign="top" width="25"><img alt="[Note]" src="images/note.png"></td><th align="left">Note</th></tr><tr><td align="left" valign="top"><p>The <code class="literal">serviceId</code> attribute is now deprecated in favor of the <code class="literal">name</code> attribute.</p></td></tr></table></div><div class="note" style="margin-left: 0.5in; margin-right: 0.5in;"><table border="0" summary="Note"><tr><td rowspan="2" align="center" valign="top" width="25"><img alt="[Note]" src="images/note.png"></td><th align="left">Note</th></tr><tr><td align="left" valign="top"><p>Using <code class="literal">contextId</code> attribute of the <code class="literal">@FeignClient</code> annotation in addition to changing the name of
the <code class="literal">ApplicationContext</code> ensemble, it will override the alias of the client name
and it will be used as part of the name of the configuration bean created for that client.</p></td></tr></table></div><div class="warning" style="margin-left: 0.5in; margin-right: 0.5in;"><table border="0" summary="Warning"><tr><td rowspan="2" align="center" valign="top" width="25"><img alt="[Warning]" src="images/warning.png"></td><th align="left">Warning</th></tr><tr><td align="left" valign="top"><p>Previously, using the <code class="literal">url</code> attribute, did not require the <code class="literal">name</code> attribute. Using <code class="literal">name</code> is now required.</p></td></tr></table></div><p>Placeholders are supported in the <code class="literal">name</code> and <code class="literal">url</code> attributes.</p><pre class="programlisting"><xslthl:annotation xmlns:xslthl="http://xslthl.sourceforge.net/">@FeignClient(name = "${feign.name}", url = "${feign.url}")</xslthl:annotation>
<span xmlns:d="http://docbook.org/ns/docbook" class="hl-keyword">public</span> <span xmlns:d="http://docbook.org/ns/docbook" class="hl-keyword">interface</span> StoreClient {
<span xmlns:d="http://docbook.org/ns/docbook" class="hl-comment">//..</span>
}</pre><p>Spring Cloud Netflix provides the following beans by default for feign (<code class="literal">BeanType</code> beanName: <code class="literal">ClassName</code>):</p><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem"><code class="literal">Decoder</code> feignDecoder: <code class="literal">ResponseEntityDecoder</code> (which wraps a <code class="literal">SpringDecoder</code>)</li><li class="listitem"><code class="literal">Encoder</code> feignEncoder: <code class="literal">SpringEncoder</code></li><li class="listitem"><code class="literal">Logger</code> feignLogger: <code class="literal">Slf4jLogger</code></li><li class="listitem"><code class="literal">Contract</code> feignContract: <code class="literal">SpringMvcContract</code></li><li class="listitem"><code class="literal">Feign.Builder</code> feignBuilder: <code class="literal">HystrixFeign.Builder</code></li><li class="listitem"><code class="literal">Client</code> feignClient: if Ribbon is enabled it is a <code class="literal">LoadBalancerFeignClient</code>, otherwise the default feign client is used.</li></ul></div><p>The OkHttpClient and ApacheHttpClient feign clients can be used by setting <code class="literal">feign.okhttp.enabled</code> or <code class="literal">feign.httpclient.enabled</code> to <code class="literal">true</code>, respectively, and having them on the classpath.
You can customize the HTTP client used by providing a bean of either <code class="literal">ClosableHttpClient</code> when using Apache or <code class="literal">OkHttpClient</code> when using OK HTTP.</p><p>Spring Cloud Netflix <span class="emphasis"><em>does not</em></span> provide the following beans by default for feign, but still looks up beans of these types from the application context to create the feign client:</p><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem"><code class="literal">Logger.Level</code></li><li class="listitem"><code class="literal">Retryer</code></li><li class="listitem"><code class="literal">ErrorDecoder</code></li><li class="listitem"><code class="literal">Request.Options</code></li><li class="listitem"><code class="literal">Collection&lt;RequestInterceptor&gt;</code></li><li class="listitem"><code class="literal">SetterFactory</code></li></ul></div><p>Creating a bean of one of those type and placing it in a <code class="literal">@FeignClient</code> configuration (such as <code class="literal">FooConfiguration</code> above) allows you to override each one of the beans described. Example:</p><pre class="programlisting"><xslthl:annotation xmlns:xslthl="http://xslthl.sourceforge.net/">@Configuration</xslthl:annotation>
<span xmlns:d="http://docbook.org/ns/docbook" class="hl-keyword">public</span> <span xmlns:d="http://docbook.org/ns/docbook" class="hl-keyword">class</span> FooConfiguration {
<xslthl:annotation xmlns:xslthl="http://xslthl.sourceforge.net/">@Bean</xslthl:annotation>
<span xmlns:d="http://docbook.org/ns/docbook" class="hl-keyword">public</span> Contract feignContract() {
<span xmlns:d="http://docbook.org/ns/docbook" class="hl-keyword">return</span> <span xmlns:d="http://docbook.org/ns/docbook" class="hl-keyword">new</span> feign.Contract.Default();
}
<xslthl:annotation xmlns:xslthl="http://xslthl.sourceforge.net/">@Bean</xslthl:annotation>
<span xmlns:d="http://docbook.org/ns/docbook" class="hl-keyword">public</span> BasicAuthRequestInterceptor basicAuthRequestInterceptor() {
<span xmlns:d="http://docbook.org/ns/docbook" class="hl-keyword">return</span> <span xmlns:d="http://docbook.org/ns/docbook" class="hl-keyword">new</span> BasicAuthRequestInterceptor(<span xmlns:d="http://docbook.org/ns/docbook" class="hl-string">"user"</span>, <span xmlns:d="http://docbook.org/ns/docbook" class="hl-string">"password"</span>);
}
}</pre><p>This replaces the <code class="literal">SpringMvcContract</code> with <code class="literal">feign.Contract.Default</code> and adds a <code class="literal">RequestInterceptor</code> to the collection of <code class="literal">RequestInterceptor</code>.</p><p><code class="literal">@FeignClient</code> also can be configured using configuration properties.</p><p>application.yml</p><pre class="programlisting"><span xmlns:d="http://docbook.org/ns/docbook" class="hl-attribute">feign</span>:
<span xmlns:d="http://docbook.org/ns/docbook" class="hl-attribute"> client</span>:
<span xmlns:d="http://docbook.org/ns/docbook" class="hl-attribute"> config</span>:
<span xmlns:d="http://docbook.org/ns/docbook" class="hl-attribute"> feignName</span>:
<span xmlns:d="http://docbook.org/ns/docbook" class="hl-attribute"> connectTimeout</span>: <xslthl:number xmlns:xslthl="http://xslthl.sourceforge.net/">5000</xslthl:number>
<span xmlns:d="http://docbook.org/ns/docbook" class="hl-attribute"> readTimeout</span>: <xslthl:number xmlns:xslthl="http://xslthl.sourceforge.net/">5000</xslthl:number>
<span xmlns:d="http://docbook.org/ns/docbook" class="hl-attribute"> loggerLevel</span>: full
<span xmlns:d="http://docbook.org/ns/docbook" class="hl-attribute"> errorDecoder</span>: com.example.SimpleErrorDecoder
<span xmlns:d="http://docbook.org/ns/docbook" class="hl-attribute"> retryer</span>: com.example.SimpleRetryer
<span xmlns:d="http://docbook.org/ns/docbook" class="hl-attribute"> requestInterceptors</span>:
- com.example.FooRequestInterceptor
- com.example.BarRequestInterceptor
<span xmlns:d="http://docbook.org/ns/docbook" class="hl-attribute"> decode404</span>: <span xmlns:d="http://docbook.org/ns/docbook" class="hl-keyword">false</span>
<span xmlns:d="http://docbook.org/ns/docbook" class="hl-attribute"> encoder</span>: com.example.SimpleEncoder
<span xmlns:d="http://docbook.org/ns/docbook" class="hl-attribute"> decoder</span>: com.example.SimpleDecoder
<span xmlns:d="http://docbook.org/ns/docbook" class="hl-attribute"> contract</span>: com.example.SimpleContract</pre><p>Default configurations can be specified in the <code class="literal">@EnableFeignClients</code> attribute <code class="literal">defaultConfiguration</code> in a similar manner as described above. The difference is that this configuration will apply to <span class="emphasis"><em>all</em></span> feign clients.</p><p>If you prefer using configuration properties to configured all <code class="literal">@FeignClient</code>, you can create configuration properties with <code class="literal">default</code> feign name.</p><p>application.yml</p><pre class="programlisting"><span xmlns:d="http://docbook.org/ns/docbook" class="hl-attribute">feign</span>:
<span xmlns:d="http://docbook.org/ns/docbook" class="hl-attribute"> client</span>:
<span xmlns:d="http://docbook.org/ns/docbook" class="hl-attribute"> config</span>:
<span xmlns:d="http://docbook.org/ns/docbook" class="hl-attribute"> default</span>:
<span xmlns:d="http://docbook.org/ns/docbook" class="hl-attribute"> connectTimeout</span>: <xslthl:number xmlns:xslthl="http://xslthl.sourceforge.net/">5000</xslthl:number>
<span xmlns:d="http://docbook.org/ns/docbook" class="hl-attribute"> readTimeout</span>: <xslthl:number xmlns:xslthl="http://xslthl.sourceforge.net/">5000</xslthl:number>
<span xmlns:d="http://docbook.org/ns/docbook" class="hl-attribute"> loggerLevel</span>: basic</pre><p>If we create both <code class="literal">@Configuration</code> bean and configuration properties, configuration properties will win.
It will override <code class="literal">@Configuration</code> values. But if you want to change the priority to <code class="literal">@Configuration</code>,
you can change <code class="literal">feign.client.default-to-properties</code> to <code class="literal">false</code>.</p><div class="note" style="margin-left: 0.5in; margin-right: 0.5in;"><table border="0" summary="Note"><tr><td rowspan="2" align="center" valign="top" width="25"><img alt="[Note]" src="images/note.png"></td><th align="left">Note</th></tr><tr><td align="left" valign="top"><p>If you need to use <code class="literal">ThreadLocal</code> bound variables in your <code class="literal">RequestInterceptor`s you will need to either set the
thread isolation strategy for Hystrix to `SEMAPHORE</code> or disable Hystrix in Feign.</p></td></tr></table></div><p>application.yml</p><pre class="programlisting"><span xmlns:d="http://docbook.org/ns/docbook" class="hl-comment"># To disable Hystrix in Feign</span>
<span xmlns:d="http://docbook.org/ns/docbook" class="hl-attribute">feign</span>:
<span xmlns:d="http://docbook.org/ns/docbook" class="hl-attribute"> hystrix</span>:
<span xmlns:d="http://docbook.org/ns/docbook" class="hl-attribute"> enabled</span>: <span xmlns:d="http://docbook.org/ns/docbook" class="hl-keyword">false</span>
<span xmlns:d="http://docbook.org/ns/docbook" class="hl-comment"># To set thread isolation to SEMAPHORE</span>
<span xmlns:d="http://docbook.org/ns/docbook" class="hl-attribute">hystrix</span>:
<span xmlns:d="http://docbook.org/ns/docbook" class="hl-attribute"> command</span>:
<span xmlns:d="http://docbook.org/ns/docbook" class="hl-attribute"> default</span>:
<span xmlns:d="http://docbook.org/ns/docbook" class="hl-attribute"> execution</span>:
<span xmlns:d="http://docbook.org/ns/docbook" class="hl-attribute"> isolation</span>:
<span xmlns:d="http://docbook.org/ns/docbook" class="hl-attribute"> strategy</span>: SEMAPHORE</pre><p>If we want to create multiple feign clients with the same name or url
so that they would point to the same server but each with a different custom configuration then
we have to use <code class="literal">contextId</code> attribute of the <code class="literal">@FeignClient</code> in order to avoid name
collision of these configuration beans.</p><pre class="programlisting"><xslthl:annotation xmlns:xslthl="http://xslthl.sourceforge.net/">@FeignClient(contextId = "fooClient", name = "stores", configuration = FooConfiguration.class)</xslthl:annotation>
<span xmlns:d="http://docbook.org/ns/docbook" class="hl-keyword">public</span> <span xmlns:d="http://docbook.org/ns/docbook" class="hl-keyword">interface</span> FooClient {
<span xmlns:d="http://docbook.org/ns/docbook" class="hl-comment">//..</span>
}</pre><pre class="programlisting"><xslthl:annotation xmlns:xslthl="http://xslthl.sourceforge.net/">@FeignClient(contextId = "barClient", name = "stores", configuration = BarConfiguration.class)</xslthl:annotation>
<span xmlns:d="http://docbook.org/ns/docbook" class="hl-keyword">public</span> <span xmlns:d="http://docbook.org/ns/docbook" class="hl-keyword">interface</span> BarClient {
<span xmlns:d="http://docbook.org/ns/docbook" class="hl-comment">//..</span>
}</pre></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="_creating_feign_clients_manually" href="#_creating_feign_clients_manually"></a>1.3&nbsp;Creating Feign Clients Manually</h2></div></div></div><p>In some cases it might be necessary to customize your Feign Clients in a way that is not
possible using the methods above. In this case you can create Clients using the
<a class="link" href="https://github.com/OpenFeign/feign/#basics" target="_top">Feign Builder API</a>. Below is an example
which creates two Feign Clients with the same interface but configures each one with
a separate request interceptor.</p><pre class="programlisting"><xslthl:annotation xmlns:xslthl="http://xslthl.sourceforge.net/">@Import(FeignClientsConfiguration.class)</xslthl:annotation>
<span xmlns:d="http://docbook.org/ns/docbook" class="hl-keyword">class</span> FooController {
<span xmlns:d="http://docbook.org/ns/docbook" class="hl-keyword">private</span> FooClient fooClient;
<span xmlns:d="http://docbook.org/ns/docbook" class="hl-keyword">private</span> FooClient adminClient;
<xslthl:annotation xmlns:xslthl="http://xslthl.sourceforge.net/">@Autowired</xslthl:annotation>
<span xmlns:d="http://docbook.org/ns/docbook" class="hl-keyword">public</span> FooController(Decoder decoder, Encoder encoder, Client client, Contract contract) {
<span xmlns:d="http://docbook.org/ns/docbook" class="hl-keyword">this</span>.fooClient = Feign.builder().client(client)
.encoder(encoder)
.decoder(decoder)
.contract(contract)
.requestInterceptor(<span xmlns:d="http://docbook.org/ns/docbook" class="hl-keyword">new</span> BasicAuthRequestInterceptor(<span xmlns:d="http://docbook.org/ns/docbook" class="hl-string">"user"</span>, <span xmlns:d="http://docbook.org/ns/docbook" class="hl-string">"user"</span>))
.target(FooClient.<span xmlns:d="http://docbook.org/ns/docbook" class="hl-keyword">class</span>, <span xmlns:d="http://docbook.org/ns/docbook" class="hl-string">"http://PROD-SVC"</span>);
<span xmlns:d="http://docbook.org/ns/docbook" class="hl-keyword">this</span>.adminClient = Feign.builder().client(client)
.encoder(encoder)
.decoder(decoder)
.contract(contract)
.requestInterceptor(<span xmlns:d="http://docbook.org/ns/docbook" class="hl-keyword">new</span> BasicAuthRequestInterceptor(<span xmlns:d="http://docbook.org/ns/docbook" class="hl-string">"admin"</span>, <span xmlns:d="http://docbook.org/ns/docbook" class="hl-string">"admin"</span>))
.target(FooClient.<span xmlns:d="http://docbook.org/ns/docbook" class="hl-keyword">class</span>, <span xmlns:d="http://docbook.org/ns/docbook" class="hl-string">"http://PROD-SVC"</span>);
}
}</pre><div class="note" style="margin-left: 0.5in; margin-right: 0.5in;"><table border="0" summary="Note"><tr><td rowspan="2" align="center" valign="top" width="25"><img alt="[Note]" src="images/note.png"></td><th align="left">Note</th></tr><tr><td align="left" valign="top"><p>In the above example <code class="literal">FeignClientsConfiguration.class</code> is the default configuration
provided by Spring Cloud Netflix.</p></td></tr></table></div><div class="note" style="margin-left: 0.5in; margin-right: 0.5in;"><table border="0" summary="Note"><tr><td rowspan="2" align="center" valign="top" width="25"><img alt="[Note]" src="images/note.png"></td><th align="left">Note</th></tr><tr><td align="left" valign="top"><p><code class="literal">PROD-SVC</code> is the name of the service the Clients will be making requests to.</p></td></tr></table></div><div class="note" style="margin-left: 0.5in; margin-right: 0.5in;"><table border="0" summary="Note"><tr><td rowspan="2" align="center" valign="top" width="25"><img alt="[Note]" src="images/note.png"></td><th align="left">Note</th></tr><tr><td align="left" valign="top"><p>The Feign <code class="literal">Contract</code> object defines what annotations and values are valid on interfaces. The
autowired <code class="literal">Contract</code> bean provides supports for SpringMVC annotations, instead of
the default Feign native annotations.</p></td></tr></table></div></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="spring-cloud-feign-hystrix" href="#spring-cloud-feign-hystrix"></a>1.4&nbsp;Feign Hystrix Support</h2></div></div></div><p>If Hystrix is on the classpath and <code class="literal">feign.hystrix.enabled=true</code>, Feign will wrap all methods with a circuit breaker. Returning a <code class="literal">com.netflix.hystrix.HystrixCommand</code> is also available. This lets you use reactive patterns (with a call to <code class="literal">.toObservable()</code> or <code class="literal">.observe()</code> or asynchronous use (with a call to <code class="literal">.queue()</code>).</p><p>To disable Hystrix support on a per-client basis create a vanilla <code class="literal">Feign.Builder</code> with the "prototype" scope, e.g.:</p><pre class="programlisting"><xslthl:annotation xmlns:xslthl="http://xslthl.sourceforge.net/">@Configuration</xslthl:annotation>
<span xmlns:d="http://docbook.org/ns/docbook" class="hl-keyword">public</span> <span xmlns:d="http://docbook.org/ns/docbook" class="hl-keyword">class</span> FooConfiguration {
<xslthl:annotation xmlns:xslthl="http://xslthl.sourceforge.net/">@Bean</xslthl:annotation>
<xslthl:annotation xmlns:xslthl="http://xslthl.sourceforge.net/">@Scope("prototype")</xslthl:annotation>
<span xmlns:d="http://docbook.org/ns/docbook" class="hl-keyword">public</span> Feign.Builder feignBuilder() {
<span xmlns:d="http://docbook.org/ns/docbook" class="hl-keyword">return</span> Feign.builder();
}
}</pre><div class="warning" style="margin-left: 0.5in; margin-right: 0.5in;"><table border="0" summary="Warning"><tr><td rowspan="2" align="center" valign="top" width="25"><img alt="[Warning]" src="images/warning.png"></td><th align="left">Warning</th></tr><tr><td align="left" valign="top"><p>Prior to the Spring Cloud Dalston release, if Hystrix was on the classpath Feign would have wrapped
all methods in a circuit breaker by default. This default behavior was changed in Spring Cloud Dalston in
favor for an opt-in approach.</p></td></tr></table></div></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="spring-cloud-feign-hystrix-fallback" href="#spring-cloud-feign-hystrix-fallback"></a>1.5&nbsp;Feign Hystrix Fallbacks</h2></div></div></div><p>Hystrix supports the notion of a fallback: a default code path that is executed when they circuit is open or there is an error. To enable fallbacks for a given <code class="literal">@FeignClient</code> set the <code class="literal">fallback</code> attribute to the class name that implements the fallback. You also need to declare your implementation as a Spring bean.</p><pre class="programlisting"><xslthl:annotation xmlns:xslthl="http://xslthl.sourceforge.net/">@FeignClient(name = "hello", fallback = HystrixClientFallback.class)</xslthl:annotation>
<span xmlns:d="http://docbook.org/ns/docbook" class="hl-keyword">protected</span> <span xmlns:d="http://docbook.org/ns/docbook" class="hl-keyword">interface</span> HystrixClient {
<xslthl:annotation xmlns:xslthl="http://xslthl.sourceforge.net/">@RequestMapping(method = RequestMethod.GET, value = "/hello")</xslthl:annotation>
Hello iFailSometimes();
}
<span xmlns:d="http://docbook.org/ns/docbook" class="hl-keyword">static</span> <span xmlns:d="http://docbook.org/ns/docbook" class="hl-keyword">class</span> HystrixClientFallback <span xmlns:d="http://docbook.org/ns/docbook" class="hl-keyword">implements</span> HystrixClient {
<xslthl:annotation xmlns:xslthl="http://xslthl.sourceforge.net/">@Override</xslthl:annotation>
<span xmlns:d="http://docbook.org/ns/docbook" class="hl-keyword">public</span> Hello iFailSometimes() {
<span xmlns:d="http://docbook.org/ns/docbook" class="hl-keyword">return</span> <span xmlns:d="http://docbook.org/ns/docbook" class="hl-keyword">new</span> Hello(<span xmlns:d="http://docbook.org/ns/docbook" class="hl-string">"fallback"</span>);
}
}</pre><p>If one needs access to the cause that made the fallback trigger, one can use the <code class="literal">fallbackFactory</code> attribute inside <code class="literal">@FeignClient</code>.</p><pre class="programlisting"><xslthl:annotation xmlns:xslthl="http://xslthl.sourceforge.net/">@FeignClient(name = "hello", fallbackFactory = HystrixClientFallbackFactory.class)</xslthl:annotation>
<span xmlns:d="http://docbook.org/ns/docbook" class="hl-keyword">protected</span> <span xmlns:d="http://docbook.org/ns/docbook" class="hl-keyword">interface</span> HystrixClient {
<xslthl:annotation xmlns:xslthl="http://xslthl.sourceforge.net/">@RequestMapping(method = RequestMethod.GET, value = "/hello")</xslthl:annotation>
Hello iFailSometimes();
}
<xslthl:annotation xmlns:xslthl="http://xslthl.sourceforge.net/">@Component</xslthl:annotation>
<span xmlns:d="http://docbook.org/ns/docbook" class="hl-keyword">static</span> <span xmlns:d="http://docbook.org/ns/docbook" class="hl-keyword">class</span> HystrixClientFallbackFactory <span xmlns:d="http://docbook.org/ns/docbook" class="hl-keyword">implements</span> FallbackFactory&lt;HystrixClient&gt; {
<xslthl:annotation xmlns:xslthl="http://xslthl.sourceforge.net/">@Override</xslthl:annotation>
<span xmlns:d="http://docbook.org/ns/docbook" class="hl-keyword">public</span> HystrixClient create(Throwable cause) {
<span xmlns:d="http://docbook.org/ns/docbook" class="hl-keyword">return</span> <span xmlns:d="http://docbook.org/ns/docbook" class="hl-keyword">new</span> HystrixClient() {
<xslthl:annotation xmlns:xslthl="http://xslthl.sourceforge.net/">@Override</xslthl:annotation>
<span xmlns:d="http://docbook.org/ns/docbook" class="hl-keyword">public</span> Hello iFailSometimes() {
<span xmlns:d="http://docbook.org/ns/docbook" class="hl-keyword">return</span> <span xmlns:d="http://docbook.org/ns/docbook" class="hl-keyword">new</span> Hello(<span xmlns:d="http://docbook.org/ns/docbook" class="hl-string">"fallback; reason was: "</span> + cause.getMessage());
}
};
}
}</pre><div class="warning" style="margin-left: 0.5in; margin-right: 0.5in;"><table border="0" summary="Warning"><tr><td rowspan="2" align="center" valign="top" width="25"><img alt="[Warning]" src="images/warning.png"></td><th align="left">Warning</th></tr><tr><td align="left" valign="top"><p>There is a limitation with the implementation of fallbacks in Feign and how Hystrix fallbacks work. Fallbacks are currently not supported for methods that return <code class="literal">com.netflix.hystrix.HystrixCommand</code> and <code class="literal">rx.Observable</code>.</p></td></tr></table></div></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="_feign_and_primary" href="#_feign_and_primary"></a>1.6&nbsp;Feign and <code class="literal">@Primary</code></h2></div></div></div><p>When using Feign with Hystrix fallbacks, there are multiple beans in the <code class="literal">ApplicationContext</code> of the same type. This will cause <code class="literal">@Autowired</code> to not work because there isn&#8217;t exactly one bean, or one marked as primary. To work around this, Spring Cloud Netflix marks all Feign instances as <code class="literal">@Primary</code>, so Spring Framework will know which bean to inject. In some cases, this may not be desirable. To turn off this behavior set the <code class="literal">primary</code> attribute of <code class="literal">@FeignClient</code> to false.</p><pre class="programlisting"><xslthl:annotation xmlns:xslthl="http://xslthl.sourceforge.net/">@FeignClient(name = "hello", primary = false)</xslthl:annotation>
<span xmlns:d="http://docbook.org/ns/docbook" class="hl-keyword">public</span> <span xmlns:d="http://docbook.org/ns/docbook" class="hl-keyword">interface</span> HelloClient {
<span xmlns:d="http://docbook.org/ns/docbook" class="hl-comment">// methods here</span>
}</pre></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="spring-cloud-feign-inheritance" href="#spring-cloud-feign-inheritance"></a>1.7&nbsp;Feign Inheritance Support</h2></div></div></div><p>Feign supports boilerplate apis via single-inheritance interfaces.
This allows grouping common operations into convenient base interfaces.</p><p><b>UserService.java.&nbsp;</b>
</p><pre class="programlisting"><span xmlns:d="http://docbook.org/ns/docbook" class="hl-keyword">public</span> <span xmlns:d="http://docbook.org/ns/docbook" class="hl-keyword">interface</span> UserService {
<xslthl:annotation xmlns:xslthl="http://xslthl.sourceforge.net/">@RequestMapping(method = RequestMethod.GET, value ="/users/{id}")</xslthl:annotation>
User getUser(<xslthl:annotation xmlns:xslthl="http://xslthl.sourceforge.net/">@PathVariable("id")</xslthl:annotation> <span xmlns:d="http://docbook.org/ns/docbook" class="hl-keyword">long</span> id);
}</pre><p>
</p><p><b>UserResource.java.&nbsp;</b>
</p><pre class="programlisting"><xslthl:annotation xmlns:xslthl="http://xslthl.sourceforge.net/">@RestController</xslthl:annotation>
<span xmlns:d="http://docbook.org/ns/docbook" class="hl-keyword">public</span> <span xmlns:d="http://docbook.org/ns/docbook" class="hl-keyword">class</span> UserResource <span xmlns:d="http://docbook.org/ns/docbook" class="hl-keyword">implements</span> UserService {
}</pre><p>
</p><p><b>UserClient.java.&nbsp;</b>
</p><pre class="programlisting"><span xmlns:d="http://docbook.org/ns/docbook" class="hl-keyword">package</span> project.user;
<xslthl:annotation xmlns:xslthl="http://xslthl.sourceforge.net/">@FeignClient("users")</xslthl:annotation>
<span xmlns:d="http://docbook.org/ns/docbook" class="hl-keyword">public</span> <span xmlns:d="http://docbook.org/ns/docbook" class="hl-keyword">interface</span> UserClient <span xmlns:d="http://docbook.org/ns/docbook" class="hl-keyword">extends</span> UserService {
}</pre><p>
</p><div class="note" style="margin-left: 0.5in; margin-right: 0.5in;"><table border="0" summary="Note"><tr><td rowspan="2" align="center" valign="top" width="25"><img alt="[Note]" src="images/note.png"></td><th align="left">Note</th></tr><tr><td align="left" valign="top"><p>It is generally not advisable to share an interface between a
server and a client. It introduces tight coupling, and also actually
doesn&#8217;t work with Spring MVC in its current form (method parameter
mapping is not inherited).</p></td></tr></table></div></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="_feign_requestresponse_compression" href="#_feign_requestresponse_compression"></a>1.8&nbsp;Feign request/response compression</h2></div></div></div><p>You may consider enabling the request or response GZIP compression for your
Feign requests. You can do this by enabling one of the properties:</p><pre class="programlisting">feign.compression.request.enabled=true
feign.compression.response.enabled=true</pre><p>Feign request compression gives you settings similar to what you may set for your web server:</p><pre class="programlisting">feign.compression.request.enabled=true
feign.compression.request.mime-types=text/xml,application/xml,application/json
feign.compression.request.min-request-size=<xslthl:number xmlns:xslthl="http://xslthl.sourceforge.net/">2048</xslthl:number></pre><p>These properties allow you to be selective about the compressed media types and minimum request threshold length.</p></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="_feign_logging" href="#_feign_logging"></a>1.9&nbsp;Feign logging</h2></div></div></div><p>A logger is created for each Feign client created. By default the name of the logger is the full class name of the interface used to create the Feign client. Feign logging only responds to the <code class="literal">DEBUG</code> level.</p><p><b>application.yml.&nbsp;</b>
</p><pre class="programlisting"><span xmlns:d="http://docbook.org/ns/docbook" class="hl-attribute">logging.level.project.user.UserClient</span>: DEBUG</pre><p>
</p><p>The <code class="literal">Logger.Level</code> object that you may configure per client, tells Feign how much to log. Choices are:</p><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem"><code class="literal">NONE</code>, No logging (<span class="strong"><strong>DEFAULT</strong></span>).</li><li class="listitem"><code class="literal">BASIC</code>, Log only the request method and URL and the response status code and execution time.</li><li class="listitem"><code class="literal">HEADERS</code>, Log the basic information along with request and response headers.</li><li class="listitem"><code class="literal">FULL</code>, Log the headers, body, and metadata for both requests and responses.</li></ul></div><p>For example, the following would set the <code class="literal">Logger.Level</code> to <code class="literal">FULL</code>:</p><pre class="programlisting"><xslthl:annotation xmlns:xslthl="http://xslthl.sourceforge.net/">@Configuration</xslthl:annotation>
<span xmlns:d="http://docbook.org/ns/docbook" class="hl-keyword">public</span> <span xmlns:d="http://docbook.org/ns/docbook" class="hl-keyword">class</span> FooConfiguration {
<xslthl:annotation xmlns:xslthl="http://xslthl.sourceforge.net/">@Bean</xslthl:annotation>
Logger.Level feignLoggerLevel() {
<span xmlns:d="http://docbook.org/ns/docbook" class="hl-keyword">return</span> Logger.Level.FULL;
}
}</pre></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="_feign_querymap_support" href="#_feign_querymap_support"></a>1.10&nbsp;Feign @QueryMap support</h2></div></div></div><p>The OpenFeign <code class="literal">@QueryMap</code> annotation provides support for POJOs to be used as
GET parameter maps. Unfortunately, the default OpenFeign QueryMap annotation is
incompatible with Spring because it lacks a <code class="literal">value</code> property.</p><p>Spring Cloud OpenFeign provides an equivalent <code class="literal">@SpringQueryMap</code> annotation, which
is used to annotate a POJO or Map parameter as a query parameter map.</p><p>For example, the <code class="literal">Params</code> class defines parameters <code class="literal">param1</code> and <code class="literal">param2</code>:</p><pre class="programlisting"><span xmlns:d="http://docbook.org/ns/docbook" class="hl-comment">// Params.java</span>
<span xmlns:d="http://docbook.org/ns/docbook" class="hl-keyword">public</span> <span xmlns:d="http://docbook.org/ns/docbook" class="hl-keyword">class</span> Params {
<span xmlns:d="http://docbook.org/ns/docbook" class="hl-keyword">private</span> String param1;
<span xmlns:d="http://docbook.org/ns/docbook" class="hl-keyword">private</span> String param2;
<span xmlns:d="http://docbook.org/ns/docbook" class="hl-comment">// [Getters and setters omitted for brevity]</span>
}</pre><p>The following feign client uses the <code class="literal">Params</code> class by using the <code class="literal">@SpringQueryMap</code> annotation:</p><pre class="programlisting"><xslthl:annotation xmlns:xslthl="http://xslthl.sourceforge.net/">@FeignClient("demo")</xslthl:annotation>
<span xmlns:d="http://docbook.org/ns/docbook" class="hl-keyword">public</span> <span xmlns:d="http://docbook.org/ns/docbook" class="hl-keyword">class</span> DemoTemplate {
<xslthl:annotation xmlns:xslthl="http://xslthl.sourceforge.net/">@GetMapping(path = "/demo")</xslthl:annotation>
String demoEndpoint(<xslthl:annotation xmlns:xslthl="http://xslthl.sourceforge.net/">@SpringQueryMap</xslthl:annotation> Params params);
}</pre></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="_troubleshooting" href="#_troubleshooting"></a>1.11&nbsp;Troubleshooting</h2></div></div></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="_early_initialization_errors" href="#_early_initialization_errors"></a>1.11.1&nbsp;Early Initialization Errors</h3></div></div></div><p>Depending on how you are using your Feign clients you may see initialization errors when starting your application.
To work around this problem you can use an <code class="literal">ObjectProvider</code> when autowiring your client.</p><pre class="programlisting"><xslthl:annotation xmlns:xslthl="http://xslthl.sourceforge.net/">@Autowired</xslthl:annotation>
ObjectProvider&lt;TestFeginClient&gt; testFeginClient;</pre></div></div></div><div class="navfooter"><hr><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="multi_pr01.html">Prev</a>&nbsp;</td><td width="20%" align="center">&nbsp;</td><td width="40%" align="right">&nbsp;</td></tr><tr><td width="40%" align="left" valign="top">&nbsp;</td><td width="20%" align="center"><a accesskey="h" href="multi_spring-cloud-openfeign.html">Home</a></td><td width="40%" align="right" valign="top">&nbsp;</td></tr></table></div></body></html>

Some files were not shown because too many files have changed in this diff Show More